2016-04-04 95 views
0

我在讀取文本文件中的對象時遇到了一些麻煩,因爲它會導致以下錯誤;JAVA - 加載基於對象的文件時遇到的問題

Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to stock.control.system.StockItem 

這就是這一行;

StockItem result = (StockItem) ois.readObject(); 

下面是我如何保存我的文件;

try { FileOutputStream fout = new FileOutputStream(filename); 
    ObjectOutputStream oos = new ObjectOutputStream(fout); 
    oos.writeObject(StockItems); } 
    catch (java.io.FileNotFoundException error) { 
     System.out.println("FILE NOT FOUND!"); 
    } 

這裏是我已經做了很多工作,將文件加載回對象ArrayList;

try { 
     FileInputStream fis = new FileInputStream(filename); 
     ObjectInputStream ois = new ObjectInputStream(fis); 
     System.out.println("LOADING DATA ..."); 
     StockItem result = (StockItem) ois.readObject(); 
    ois.close(); 
     System.out.println(result.getItemID() + ", " + result.getItemDesc() 
      + ", " + result.getPrice() + ", " + result.getQuantity() + ", " 
      + result.getReOrderLevel()); // used for testing 
    } catch (java.io.FileNotFoundException error) { 
     System.out.println("FILE NOT FOUND!"); 
    } catch (IOException | ClassNotFoundException ex) { 
     Logger.getLogger(StockArrayList.class.getName()).log(Level.SEVERE, null, ex); 
    } 

如果任何地方可以教育我,所以它可以正確完成它將不勝感激。

+0

什麼是'StockItems'?這是一個'StockItem'實例嗎? – starf

+0

您序列化了'StockItem []'類型的對象並且想要將未反序列化的對象強制類型爲'StockItem'?這一定會失敗。將它重新序列化爲一個數組。 – blafasel

+0

看起來你正在編寫一個數組列表「StockItems」,但試圖閱讀「StockItem」。 –

回答

0

我只是不得不將輸出分配給測試類中的數組列表,然後反饋到一個接口中,並且從接口中我必須將它分配到另一個數組列表中,這就是我如何修復這個錯誤。

0

看起來像文件不包含你認爲它的作用。它包含一個ArrayList,而不是一個StockItem。嘗試取數組列表的第一個元素:

StockItem result = (StockItem) ((ArrayList)ois.readObject()).get(0) 

並查看是什麼類型。

+0

請注意,如果它是「StockItem」的'ArrayList',則可能無法完成!你可能想遍歷列表並處理它們。它包含的 – bl184999

+0

; [Item ID = P123,Item Description = 1TB Hard drive,Price = 75.0,Quantity = 267,Re Order Level = 50] ill給每個對象迭代以保存它們=) –

+0

產生該文件的是什麼?如果它不是'StockOtem'的'ObjectOutputStream',則Java不會將字符串重建爲您將其投入的任何對象。 – bl184999

0

錯誤指出寫入文件的是ArrayList。 看起來像你寫的StockItemsArrayList<StockItem>。當你閱讀時,你會得到數組列表,所以你不能將它投射到StockItem。您需要將其轉換爲ArrayList,然後遍歷列表並將每個元素轉換爲StockItem

相關問題