2011-12-07 48 views
0

編輯:我解決了問題,我忘記關閉ObjectOutputStream。 「衛生署!我會離開這個問題,以防萬一有人想提出一個更優雅的選擇,這將非常感激。將非字符串對象的ArrayList寫入文件

我目前正在嘗試編寫一個名爲phonebook的文件,該文件包含一個名爲PhonebookEntry的對象的ArrayList。這裏是電話簿類:

import java.util.ArrayList; 
import java.io.*; 

public class Phonebook implements Serializable 
    private static final long serialVersionUID = 1; 

    ArrayList<PhonebookEntry> phonebookEntries = new ArrayList<PhonebookEntry>(); 

    public void addEntry(String name, String number) { 
     PhonebookEntry newEntry = new PhonebookEntry(name, number); 
     phonebookEntries.add(newEntry); 
    } 

} 

我一直在使用一個簡單的ObjectInput試圖/ OutputStream中,我可以得到它的保存方式,但不加載(通常與EOFExcpetion)。有沒有一種優雅的方式來保存這樣的對象,或者有什麼辦法將對象的ArrayList保存到文件中?

+0

如何在使用ObjectOutputStream保存後再次加載它? – Jesper

+0

是的,那一直沒有奏效。 – winglerw28

+0

我嘗試使用ois.readObject()加載它時出現EOFException錯誤; (ObjectInputStream) – winglerw28

回答

0

以下的作品。我猜你缺少flush()或close()。

public static void main(final String[] args) throws IOException, ClassNotFoundException { 
    final ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("test.out")); 
    final Phonebook phonebook = new Phonebook(); 
    out.writeObject(phonebook); 
    out.flush(); 
    out.close(); 

    final ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.out")); 
    final Object o = in.readObject(); 
    System.out.println(o); 
} 
-1

幾個不同的問題,我假設的代碼是一個示例代碼(所以我不打算修復它)永遠不會填充任何東西,因爲你繼續釋放對象。所以你最終會得到null,每次添加都爲null。

要回答你的問題,不知道有多少更eligent它不過是較短的版本是:

for (PhonebookEntry pbe : phonebookEntries) { 
    System.out.println("Name: " + pbe.getName()); 
    .... 
} 
+0

我不確定我是否理解awm的答案......它與文件io無關,但也許我錯過了一些東西......我試圖將整個Phonebook對象保存到具有所有PhonebookEntry的文件中裏面的物體。 – winglerw28

0

當你希望你的PhonebookEntries被序列化爲標準方式時,它的成員必須是可序列化的。