无法将其强制转换为java.util.ArrayList

3
尝试将对象写入数组,然后保存到output.data中,然后再次读取对象。
写入:
private void saveBtnActionPerformed(java.awt.event.ActionEvent evt) {                                        

    File outFile;
    FileOutputStream fStream;
    ObjectOutputStream oStream;

    try {
        outFile = new File("output.data");
        fStream = new FileOutputStream(outFile);
        oStream = new ObjectOutputStream(fStream);

        oStream.writeObject(arr);

        JOptionPane.showMessageDialog(null, "File Written Successfully");

        oStream.close();
    } catch (IOException e) {
        System.out.println("Error: " + e);
    }
}                  

阅读:

private void readBtnActionPerformed(java.awt.event.ActionEvent evt) {                                        

    File inFile;
    FileInputStream fStream;
    ObjectInputStream oStream;

    try {
        inFile = new File("output.data");
        fStream = new FileInputStream(inFile);
        oStream = new ObjectInputStream(fStream);

        //create an array of assessments
        ArrayList <Assessment> xList;
        xList = (ArrayList<Assessment>)oStream.readObject();



        for (Assessment x:xList) {
            JOptionPane.showMessageDialog(null, "Name: " + x.getName() + "Type: " + x.getType() + "Weighting: " + x.getWeighting());
        }

        oStream.close();
    } catch (IOException e) {
        System.out.println("Error: " + e);
    } catch (ClassNotFoundException ex) {
        System.out.println("Error: " + ex);
    }


}                      

代码编译没有问题,文件本身也保存得很好。但是当我尝试读取文件时,什么也没有发生,NetBeans会显示以下信息:“在线程“AWT-EventQueue-0”中发生异常,java.lang.ClassCastException:[Lnetbeansswingexample.Assessment; 无法转换为java.util.ArrayList”。似乎引起问题的代码行是:
xList = (ArrayList<Assessment>)oStream.readObject();

任何帮助都将不胜感激,谢谢。如果答案很显然,请见谅,我对编程还很陌生。

因为你正在序列化一个数组,而不是ArrayList对象。 - Tagir Valeev
1
saveBtnActionPerformed 方法中的 arr 是什么类型? - Masudul
1个回答

5

根据您得到的异常,看起来oStream.readObject()返回的是一个Assessment数组,而不是一个List。您可以将其转换为List

    List <Assessment> xList;
    xList = Arrays.asList((Assessment[])oStream.readObject());

如果您必须使用java.util.ArrayList

    ArrayList<Assessment> xList;
    xList = new ArrayList<> (Arrays.asList((Assessment[])oStream.readObject()));

非常感谢,我现在明白自己哪里出了问题了...我应该使用一个列表而不是数组。那段代码完美地运行了。 - David Lawlor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接