【问题标题】:Load multiple value File into ArrayList in JAVA将多值文件加载到 JAVA 中的 ArrayList 中
【发布时间】:2021-01-19 23:25:04
【问题描述】:

我有一个包含这种内容的文件:

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() 后,我收到此错误:

线程“主”java.io.StreamCorruptedException 中的异常:无效 流标头:6163636F 在 java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:938) 在 java.io.ObjectInputStream.(ObjectInputStream.java:396) 在 Main.main(Main.java:18) 处的 Main.loadAccounts(Main.java:151)

【问题讨论】:

  • ObjectInputStream 用于序列化数据,而不是随机文本
  • 您应该研究基于 JSON 的解决方案。
  • 你可能应该在文件中逐行读取,并相应地存储

标签: java arraylist


【解决方案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();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 2022-01-09
    • 2015-01-28
    • 2014-01-07
    • 2013-04-13
    • 2017-06-23
    • 2021-03-22
    相关资源
    最近更新 更多