2014-12-19 99 views
-1

我在讀取Java文件中的ArrayList時遇到了一些麻煩。對象無法投射到ArrayList

我有一個實現Serializable的「User」類,所以當我去保存這些用戶的ArrayList時,它似乎工作正常 - 但是當我嘗試閱讀它們時,它是一個不同的故事。

ava.lang.ClassCastException:用戶不能轉換到java.util.ArrayList中

代碼中,我有閱讀如下..

private List<User> userList = new ArrayList<User>(); 

public void readList() throws FileNotFoundException, IOException, ClassNotFoundException 
{ 
    System.out.println("Trying to read list.."); 
    FileInputStream fis = new FileInputStream("userList.txt"); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    System.out.println("Created Streams...."); 
    userList = ((ArrayList<User>)ois.readObject()); 
    ois.close(); 
} 

有沒有人也有類似的問題,或不知道如何幫助我?

謝謝。

+1

'「有沒有人也有類似的問題,」' - 你得在你的程序中的錯誤,我們」所有這一切都經歷過。您還需要展示如何序列化數據,因爲反序列化不是以與序列化對稱的方式完成的。它看起來像是將數據序列化爲一個User對象,然後試圖以ArrayList的形式讀取它,事實並非如此。 – 2014-12-19 00:55:56

+0

請提供關於如何序列化/存儲對象的示例代碼 – kamoor 2014-12-19 01:10:47

回答

0

如果你想從流中反序列化一個ArrayList,那麼你必須確保將一個ArrayList序列化到流中。你的序列化對象User的方式,你將需要反序列化他們像這樣:

private List<User> userList; 

public void readList() throws FileNotFoundException, IOException, ClassNotFoundException { 
    System.out.println("Trying to read list.."); 
    this.userList = new ArrayList<User>(); 
    FileInputStream fis = new FileInputStream("userList.txt"); 
    try { 
     ObjectInputStream ois = new ObjectInputStream(fis); 
     System.out.println("Created Streams...."); 

     // you would want to store this number in your object stream as userList.size() 
     int numberOfUsersSerialized = 5; 
     for (int i = 0; i < numberOfUsersSerialized; i++) { 
      userList.add((User) ois.readObject()); 
     } 
    } finally { 
     fis.close(); 
    } 
}