Загрузить файл с несколькими значениями в ArrayList в JAVA

#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();
    }