我在从文本文件中读取对象时遇到一些麻烦,因为它会产生以下错误;
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 :(得分:0)
看起来该文件不包含您的想法。它包含ArrayList
,而不是StockItem
。尝试采用arraylist的第一个元素:
StockItem result = (StockItem) ((ArrayList)ois.readObject()).get(0)
并查看它是什么类型。
答案 1 :(得分:0)
错误说写入文件的是ArrayList。
您写的StockItems
似乎是ArrayList<StockItem>
。阅读时,您会返回数组列表,因此无法将其强制转换为StockItem
。您需要将其强制转换为ArrayList
,然后遍历列表并将每个元素转换为StockItem
。
答案 2 :(得分:0)
我只需将输出分配给测试器类中的数组列表,然后将其输入接口,并从接口内部将其分配到另一个数组列表中,这就是我如何修复此错误。