JAVA - 加载基于对象的文件时出现问题

时间:2016-04-04 21:23:45

标签: 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 { 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);
    }

如果任何地方可以教育我这样可以正确地完成它将非常感激。

3 个答案:

答案 0 :(得分:0)

看起来该文件不包含您的想法。它包含ArrayList,而不是StockItem。尝试采用arraylist的第一个元素:

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

并查看它是什么类型。

答案 1 :(得分:0)

错误说写入文件的是ArrayList。 您写的StockItems似乎是ArrayList<StockItem>。阅读时,您会返回数组列表,因此无法将其强制转换为StockItem。您需要将其强制转换为ArrayList,然后遍历列表并将每个元素转换为StockItem

答案 2 :(得分:0)

我只需将输出分配给测试器类中的数组列表,然后将其输入接口,并从接口内部将其分配到另一个数组列表中,这就是我如何修复此错误。