【发布时间】:2018-05-16 07:45:52
【问题描述】:
我正在尝试将名为 questions 的 Question 对象的 ArrayList 写入文件,然后读取该文件。
我的问题是,当我阅读文件时,它给了我一个错误,上面写着:java.lang.ClassCastException: java.lang.String cannot be cast to Question at Quiz.load
我的问题是,为什么会出现这个问题,我该如何解决?我一直在阅读很多教程,他们只是将对象转换为我所做的类名。我包含了我的保存和加载功能。
测验课内:
将对象写入文件
ArrayList<Question> questions = new ArrayList<>();
//filename given by user
FileOutputStream fos = new FileOutputStream(filename);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(questions);
从文件中读取对象
ArrayList<Question> readQuestions = new ArrayList<>();
FileInputStream fis = new FileInputStream(filename);
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.print("QUIZ LOADING...");
readQuestions.add((Question)ois.readObject()); //problem occurs
【问题讨论】:
-
非常简单。您序列化了一个字符串并试图将其反序列化为一个问题。很明显,这不是为生成文件而实际执行的代码。这段代码除了序列化一个空的 ArrayList 之外什么都不做,这进一步证明了这一点。 进一步通过您的代码序列化 ArrayList 但尝试将其反序列化为一个问题这一事实证明了这一点,这开始没有意义。我只能建议你发布真实的代码。
-
嗨,EJP,谢谢,我会稍微发布一下代码。我会修改它,因为它也有 GUI 的东西,而且太长了。
-
@EJP 你是说最近的那个吗?我之前发布的那个没有扫描仪和导入,所以我只是添加了那个。完整的代码中有 GUI,自从我使用 NetBeans 的自动生成代码的拖放功能以来,它已经很长时间了。当前代码可以在终端上编译/运行,它仍然显示 ClassCastException
-
我在问你为什么发布的代码与你所询问的异常的实际产生方式无关。这完全是在浪费每个人的时间。不要这样做。
-
@EJP 我也是这么想的。我将您对“真实代码”的评论误解为“完整代码”,因为代码的 sn-p 并不代表真实代码。我猜你的意思是把问题的相关代码。我将删除不必要的代码。
标签: java file serialization arraylist classcastexception