JAVA-加载基于对象的文件时遇到问题

JAVA-加载基于对象的文件时遇到问题,java,file,object,save,load,Java,File,Object,Save,Load,我在从文本文件中读取对象时遇到了一些问题,因为它导致了以下错误: Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to stock.control.system.StockItem 这是哪一条线 StockItem result = (StockItem) ois.readObject(); 下面是我如何保存我的文件 try { FileOutputStre

我在从文本文件中读取对象时遇到了一些问题,因为它导致了以下错误:

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!");
    }
这是我为far所做的,将文件加载回object 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);
    }

如果有任何地方能教我如何正确操作,我将不胜感激。

该文件似乎不包含您所认为的内容。它包含一个
ArrayList
,而不是
StockItem
。尝试获取arraylist的第一个元素:

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

然后查看这是什么类型。

错误表明写入文件的是ArrayList。
看起来您编写的
StockItems
ArrayList
。读取时,将返回数组列表,因此无法将其强制转换为
StockItem
。您需要将其强制转换为
ArrayList
,然后迭代列表并将每个元素强制转换为
StockItem

,我只需将输出分配给tester类中的数组列表,然后该数组列表依次输入到一个接口中,并从接口中分配到另一个数组列表中,这就是我修复此错误的方法。

什么是
StockItems
?这是
StockItem
实例吗?您序列化了类型为
StockItem[]
的对象,并希望将未序列化的对象强制转换为类型为
StockItem
?这必须失败。再次将其取消序列化为数组。看起来您正在编写arraylist“StockItems”,但正在尝试读取“StockItem”。请注意,如果它是
StockItem
s的
arraylist
,则可能无法完成此操作!您可能希望遍历列表并处理它们;[Item ID=P123,Item Description=1TB硬盘,价格=75.0,数量=267,重新订购级别=50]我将给出每个对象的迭代以立即保存它们=)是什么生成了该文件?如果它不是一个
ObjectOutputStream
馈送给
StockItem
,Java将不会将字符串重构为您将其强制转换到的任何对象。