2012-07-27 64 views
0

我需要從序列化文本文件讀取數組列表的幫助,我不相信我有問題,但是我看不到它是否實際上存儲了所有的信息,因爲我不能把它打印出來進行測試,這裏的代碼snipets: ,當我從文件中讀取我得到的ArrayList中不能轉換到StoreAddress從文本文檔中序列化/反序列化數組列表問題Java

FileInputStream ios = new FileInputStream("C:\\Users\\Mr Cata\\Desktop\\Testingoutput.txt"); 
    ObjectInputStream ois = new ObjectInputStream(ios); 
    StoreAddress SAR = (StoreAddress)ois.readObject(); 
    ArrayList<StoreAddress> ALStore = (ArrayList)ois.readObject(); 

    for(int i = 0; i < ALStore.size(); i++){ 
     String list = ALStore.get(i).toString();    
    } 

    ios.close(); 

下一個

for(int i = 0; i < ALStore.size(); i++){ 
    ALStore.get(i);     
} 

...

for(int i = 0; i < ALStore.size(); i++){ 
    if (i >= ALStore.size()) 
    { 
     ALStore.add(SA);} 
    } 

    FileOutputStream fos = new FileOutputStream("C:\\Users\\Mr Cata\\Desktop\\Testingoutput.txt"); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 

    oos.writeObject(ALStore); 
    fos.close(); 
} 

回答

1

當你寫入文件,你寫這樣

for(int i = 0; i < ALStore.size(); i++){ 
    if (i >= ALStore.size()) { 
     ALStore.add(SA); 
     } 
    } 
FileOutputStream fos = new FileOutputStream("C:\\Users\\MrCata\\Desktop\\Testingoutput.txt"); 
ObjectOutputStream oos = new ObjectOutputStream(fos); 

oos.writeObject(ALStore); 
fos.close(); 

這裏您正在編寫

ALStore

這是你提的數組列表。但是,當你正在閱讀,您的片段看起來像

FileInputStream ios = new FileInputStream("C:\\Users\\MrCata\\Desktop\\Testingoutput.txt"); 
ObjectInputStream ois = new ObjectInputStream(ios); 
StoreAddress SAR = (StoreAddress)ois.readObject(); 
ArrayList<StoreAddress> ALStore = (ArrayList)ois.readObject(); 
for(int i = 0; i < ALStore.size(); i++){ 
    String list = ALStore.get(i).toString(); 

    } 

ios.close(); 

你這裏需要注意的是,你已經寫了只有數組列表對象,但不StoreAddress。如果是這樣,那麼需要什麼行

StoreAddress SAR = (StoreAddress)ois.readObject(); 

在片段?這是這裏的問題。刪除它,它應該工作正常。

+0

我沒有注意到,真的很簡單的錯誤,謝謝。 – user972450 2012-07-27 06:41:25

1

1.創建類和實例變量,它的ArrayList<Your_Type>.

2.創建該類的目的,並且Serialize the object並將其存儲在 「Myfile.ser」。

3.De-serializing,施放對象到它原始類型 ..

例如:

  Cat c = (Cat) inputS.readObject(); 

4.現在,從這個對象引用變量訪問該ArrayList 。

**eg:** 

      c.myArr; 

如果你want..like這個你可以使用for-each打印ArrayList中的元素..

 for (Your_type t : myArr){ 

      System.out.println(t); 

    } 
+0

我已經有一個單獨的類,序列化,或者你說讓數組列表存儲串行化類中的字符串數組? – user972450 2012-07-27 06:42:56

+0

首先告訴我你的ArrayList包含了什麼....第二不要序列化ArrayList,而是將包含此ArrayList的類序列化爲實例變量 – 2012-07-27 06:54:01

+0

序列化類包含通過用戶輸入從GUI接收到的一串字符串。 – user972450 2012-07-27 07:01:07

1

在最後的代碼片段中,您只需要寫一個ArrayList<ALStore>然而在您的第一個代碼片段中,您嘗試執行兩次讀取,第一個是StoreAddress實例。

因此演員例外。

順便說一句,嘗試遵守Java慣例寫駱駝的情況下寫變量。

+0

我會記住這一點,並表示感謝。 – user972450 2012-07-27 06:43:18