【问题标题】:Reading object from a file and saving it into ArrayList从文件中读取对象并将其保存到 ArrayList
【发布时间】:2016-03-21 13:16:54
【问题描述】:

我在从文件中读取特定对象并将其保存到 ArrayList 时遇到问题。

首先,我使用writeCustomer() 写一个客户。然后我从List customerList 写入所有记录并将它们保存到文件中。这很好用。

然后我想读取保存的文件,所以我使用readCustomer() 读取了一行。此方法返回一个Customer,然后我想使用readData() 返回一个包含所有Clients 的列表并读取它,我在list.add(readCustomer(bufferedReader)) 行中有nullPointerException;

我的Class Customer 有一个构造函数,并且有一个覆盖方法toString()

public class SaveCustomers {

public static void main(String[] args) throws IOException {

    List<Customers> customersList = new ArrayList<>();
    customersList.add(new Customers("ABC", 10));
    customersList.add(new Customers("SGS", 20));
    customersList.add(new Customers("FSD", 30));

    try (PrintWriter out = new PrintWriter("customer.txt", "UTF-8"))
    {         writeData(customersList, out);      }


    BufferedReader bufferedReader = new BufferedReader(new FileReader("customer.txt"));
    List<Customers> newList =  readData(bufferedReader);


    for(Customers c: newList){
        System.out.println(c);
    }
}

private static void writeCustomer(PrintWriter out, Customers customers){
    out.println(customers.getName()+"|"+customers.getTarrif());
}

private static void writeData(List<Customers> customersList, PrintWriter out){
    for(Customers c:customersList){
        writeCustomer(out, c);
    }
}

public static Customers readCustomer(BufferedReader bufferedReader) throws IOException {
    String line = bufferedReader.readLine();
    String [] tokens = line.split("\\|");
    String name = tokens[0];
    int time = Integer.valueOf(tokens[1]);
    return new Customers(name, time);
}

public static List<Customers> readData(BufferedReader bufferedReader) throws IOException {

    List<Customers> list = new ArrayList<>();
        while (bufferedReader.readLine() != null) {
            list.add(readCustomer(bufferedReader));
        }
    return list;
}}

【问题讨论】:

  • 我有一个问题....它不起作用”——到底发生了什么?例外?输出错误?无限循环?
  • 感谢 Sasha 降低了我的声誉。我希望谢谢你做了你有更好的心情....
  • 如果你有兴趣,我没有投反对票。评论有时只是评论。大多数投反对票的人根本不发表评论。
  • 萨沙,对不起。你是个好人,你很有帮助。
  • @bartek1982 改进了英语但不幸的是问题仍然质量低下。您能否编辑您的帖子并说明“它不起作用”是什么意思?

标签: java arraylist bufferedreader


【解决方案1】:

你已经接近解决方案了;)

在方法中:

readData(BufferedReader bufferedReader)

只要改变这一行

for(Customers l : list) {

到这个:

while (bufferedReader.ready()) {

【讨论】:

  • 谢谢本。它工作安静好。我的输出看起来像:BC 10 GS 20 SD 30。但这是开始的东西:)
  • 很奇怪,bufferedReader.readLine();尽管 customer.txt 文件中有 ABC|10,但返回 BC|10...
  • OK 使用 while (bufferedReader.ready()) { 而不是 while (bufferedReader.read() != -1) { (解决方案已编辑)
  • 是我的错。我把 read() 而不是 ready()... 它的工作原理。谢谢!!!当我使用 bufferedReader.readLine() != null 时,我在 list.add(readCustomer(bufferedReader)); 行中有 nullPointerException。你知道为什么不能使用它吗?非常感谢您的帮助!!!
  • NullPointerException in line list.add(readCustomer(bufferedReader)) 表示列表为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
相关资源
最近更新 更多