2012-01-28 62 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等。

當您開始更改對象時,寫入和讀取對象會變得棘手(添加新字段等等。)。