#java #arraylist
#java #arraylist
Вопрос:
У меня есть файл с таким содержимым:
AccountNumber= 1000, branchName =’11’, balance = 420, CustomerNumber = 1
AccountNumber= 1001, branchName =’11’, balance = 323, CustomerNumber = 2
У меня есть метод, который считывает содержимое и загружает его в ArrayList
но :
private static void loadAccounts() throws IOException, ClassNotFoundException {
static ArrayList<Account> accounts = new ArrayList<Account>();
FileInputStream fileInputStream = new FileInputStream("AccountFile");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
accounts = (ArrayList<Account>) objectInputStream.readObject();
objectInputStream.close();
}
но после того, как я звоню loadAccount()
, я получаю эту ошибку:
Исключение в потоке «main» java.io.StreamCorruptedException: недопустимый заголовок потока: 6163636F в java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:938) в java.io.ObjectInputStream.(ObjectInputStream.java:396) в Main.loadAccounts(Main.java:151) в Main.main(Main.java:18)
Комментарии:
1. ObjectInputStream предназначен для сериализованных данных, а не для случайного текста
2. Вам следует изучить решение на основе JSON.
3. вероятно, вам следует читать строку за строкой в файле и сохранять соответственно
Ответ №1:
В Java нет решения для автоматического преобразования этих строк в ваш Account
объект, вам нужно будет реализовать его самостоятельно. Вот пример того, как заставить его работать, предполагая, что шаблон строки не изменится:
private static void loadAccounts() throws IOException, ClassNotFoundException {
List<Account> accounts = new ArrayList<Account>();
final FileReader fileReader = new FileReader("AccountFile");
final BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = bufferedReader.readLine();
while ( line != null) {
final String[] split = line.split(",");
final Map<String, String> map = new HashMap<>();
for (String entry : split) {
final String[] keyAndValue = entry.split("=");
map.put(keyAndValue[0], keyAndValue[1]);
}
Account account = new Account();
account.setAccountNumber(map.get("accountNumber"));
account.setBranchName(map.get("branchName"));
account.setBalance(map.get("balance"));
account.setBranchName(map.get("customerNumber"));
accounts.add(account);
line = bufferedReader.readLine();
}
fileReader.close();
bufferedReader.close();
}