2012-01-28 39 views
3

我想知道如何从列表中读取对象,如果我不知道有多少对象?保存更容易,因为比我使用ArrayList中存储所有对象的对象数量要少。像这样的代码:从文件加载对象arrayList

// Save all customer object from customerList 
for(int j=0; j < customerList.size(); j++) { 
    outObjectStream.writeObject(customerList.get(j)); 
} 

我的想法是使用类似的东西来加载所有对象文件中,一次次将它们添加一个到ArrayList它已被清除后。但是正如我写的,当我不知道文件内部的对象数量时,这是不可能的。任何想法如何以简单的方式解决这个问题?

回答

6

您的设计存在缺陷:您应该将列表序列化为文件,而不是每个Customer对象。然后你只需要反序列化整个List。

反序列化后,您将有一个新的列表实例。如果你绝对必须客户装入列表,使用customerList.addAll(list);

所有的常见Collections本身Serializable:使用并信任JDK的API!

+0

OK,那么我也许应该改变我的代码,然后保存客户的arraylist,但我会像这样加载arraylist:inObjectStream.readObject(customerList),并准备再次使用arraylist,并且不需要做其他事情? – 2012-01-28 12:33:14

+1

@ 3D-kreativ - 我建议你试试看,而不是问一个“你真的这是什么意思?”风格的后续问题。 – 2012-01-28 13:17:33

+0

@bohemian thanx堆......救了我的屁股...... – 2012-08-29 13:02:28

2

使用ArrayList.add()。元素的数量不需要事先知道。

3

您应该使用outObjectStream.writeObject(customerList);并让ObjectInputStream在读取时做这项工作。

+0

嗯,但如果我想加载customerList,它如何“连接”到我在代码中的customerList,或者我不需要做任何事情除此之后,我已加载customerList?!仅仅使用somethong就足够了:inObjectStream.readObject(customerList);然后只是很高兴并继续使用arrayList!? :) – 2012-01-28 12:21:54

1

从文件中读取对象到列表中,你需要阅读这回你写它相反的方式:

readObject(...) 

而不是:

writeObject(...) 

但是,你真的通常不想单独保存每个对象。人们应该将整个列表保存为一个对象,或理想地将其保存为更易读的格式,如CSV,XML或JSON等。

当您开始更改对象时,写入和读取对象会变得棘手(添加新字段等等。)。