2016-04-04 50 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

相关问题