【问题标题】:JAVA - trouble with loading a object based fileJAVA - 加载基于对象的文件时遇到问题
【发布时间】:2016-04-04 21:23:45
【问题描述】:

我在从文本文件中读取对象时遇到了一点问题,因为它会引发以下错误;

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);
    }

如果有任何地方可以教育我,使其能够正确完成,将不胜感激。

【问题讨论】:

  • 什么是StockItems?这是StockItem 实例吗?
  • 您序列化了一个StockItem[] 类型的对象,并希望将未序列化的对象转换为StockItem 类型?这必须失败。再次将其反序列化为数组。
  • 看起来您正在编写一个数组列表“StockItems”,但试图读取一个“StockItem”。

标签: java file object save load


【解决方案1】:

错误表明写入文件的内容是 ArrayList。 看起来你写的StockItemsArrayList<StockItem>。当你阅读时,你会得到数组列表,所以你不能将它转换为StockItem。您需要将其转换为ArrayList,然后遍历列表并将每个元素转换为StockItem

【讨论】:

    【解决方案2】:

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

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

    看看那是什么类型。

    【讨论】:

    • 请注意,如果它是StockItems 的ArrayList,您可能不会完成!您可能希望遍历列表并全部处理它们。
    • 它包含; [项目 ID = P123, 项目描述 = 1TB 硬盘, 价格 = 75.0, 数量 = 267, 重新订购等级 = 50] 我现在对每个对象进行迭代以保存它们 =)
    • 文件是由什么产生的?如果不是 ObjectOutputStream 馈送 StockItem,Java 不会将字符串重构为您将其转换为的任何对象。
    【解决方案3】:

    我只需要将输出分配给测试器类中的数组列表,然后再将其输入接口,然后在接口内我必须将其分配给另一个数组列表,这就是我修复此错误的方法。

    【讨论】:

      猜你喜欢
      • 2017-12-19
      • 1970-01-01
      • 2021-08-06
      • 2013-12-07
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      相关资源
      最近更新 更多