Java 从文件中读取对象并将其保存到ArrayList中

Java 从文件中读取对象并将其保存到ArrayList中,java,arraylist,bufferedreader,Java,Arraylist,Bufferedreader,我在从文件中读取特定对象并将其保存到ArrayList中时遇到问题 首先,我使用writeCustomer()编写一个客户。然后我从列表customerList中写入所有记录,并将它们保存到文件中。这很有效 然后我想读取保存的文件,因此我使用readCustomer()读取一行。此方法返回一个Customer,然后我想使用readData()返回一个包含所有客户端的列表,并读取它,我在行列表中有nullPointerException。添加(readCustomer(bufferedReader

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

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

然后我想读取保存的文件,因此我使用
readCustomer()
读取一行。此方法返回一个
Customer
,然后我想使用
readData()
返回一个包含所有
客户端的列表,并读取它,我在行列表中有nullPointerException。添加(readCustomer(bufferedReader))

我的
类Customer
有一个构造函数,它有一个重写方法
toString()

公共类存储客户{
公共静态void main(字符串[]args)引发IOException{
List CustomerList=新建ArrayList();
添加(新客户(“ABC”,10));
添加(新客户(“SGS”,20));
添加(新客户(“FSD”,30));
试一试(PrintWriter out=新的PrintWriter(“customer.txt”、“UTF-8”))
{writeData(CustomerList,out);}
BufferedReader BufferedReader=新的BufferedReader(新文件读取器(“customer.txt”);
List newList=readData(bufferedReader);
针对(客户c:新列表){
系统输出打印ln(c);
}
}
专用静态void writeCustomer(打印输出,客户){
out.println(customers.getName()+“|”+customers.getTarrif());
}
私有静态void writeData(列表CustomerList,打印输出){
用于(客户c:客户列表){
writeCustomer(输出,c);
}
}
公共静态客户readCustomer(BufferedReader BufferedReader)引发IOException{
String line=bufferedReader.readLine();
String[]tokens=line.split(“\\\\”);
字符串名称=令牌[0];
int time=Integer.valueOf(令牌[1]);
返回新客户(姓名、时间);
}
公共静态列表读取数据(BufferedReader BufferedReader)引发IOException{
列表=新的ArrayList();
while(bufferedReader.readLine()!=null){
添加(readCustomer(bufferedReader));
}
退货清单;
}}

您已接近解决方案;)

在方法上:

readData(BufferedReader bufferedReader)
换一行就行了

for(Customers l : list) {
对于这一点:

while (bufferedReader.ready()) {

“我有个问题……它不起作用”——到底发生了什么?例外?输出错误?无限循环?谢谢萨莎降低了我的声誉。我希望谢谢你这么做,你会有更好的心情……如果你感兴趣,我没有投反对票。评论有时只是一个评论。大多数投反对票的人根本不评论。萨沙,对不起。你是一个很棒的人,你非常乐于助人。@bartek1982提高了英语,但不幸的是,这个问题的质量仍然很低。你能编辑一下你的帖子,告诉我“它不工作”是什么意思吗?谢谢你,本。它工作得很好。我的输出看起来像:bc10gs20sd30。但这是begin的东西:)很奇怪,bufferedReader.readLine();返回BC | 10,尽管customer.txt文件中有ABC | 10…可以使用while(bufferedReader.ready()){而不是while(bufferedReader.read()!=-1){(解决方案编辑)Ben my fault。我将read()而不是ready()…它可以工作。谢谢!!!当我使用bufferedReader.readLine()!=null时,我在行列表中有nullPointerException。添加(readCustomer(bufferedReader));。您知道为什么不能使用它吗?非常感谢您的帮助!!!行列表中的NullPointerException。添加(readCustomer(bufferedReader))表示列表为空。
while (bufferedReader.ready()) {