当前位置: 首页 > 知识库问答 >
问题:

类强制转换异常读取显示对象的ArrayList的写入文件

秦承安
2023-03-14
/**
     * A method that writes variables in a file for shows in the program.
     * 
     * @author 
     * @version (1.2 2022.01.05)
     */
    public void writeShowData(String fileName) throws FileNotFoundException{
        String showPath = "c:\\Users\\COMPUTER\\bluej files\\projects\\chapter15\\willem\\CinemaReservationSystemFiles\\";
        try
        {
            FileOutputStream fos = new FileOutputStream(showPath+fileName,true);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(show);
            oos.flush();
            oos.close();
        }catch (IOException e) {
            e.printStackTrace();
        }

    }
    
    /**
     * A method that reads variables in a file for shows setup use in the program.
     * 
     * @author 
     * @version (1.2 2022.01.05)
     */
    public void readShowData(String fileName) throws FileNotFoundException {          
        try
        {   FileInputStream fis = new FileInputStream(fileName);
            ObjectInputStream ois = new ObjectInputStream(fis);
            List <Show>shows =(List<Show>)ois.readObject();
            ois.close();
            System.out.println(shows.toString());// for testing    
        }
        catch (IOException e) {
            e.printStackTrace();
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }  

行:列表

类显示不能被强制转换到类java.util.列表(等等...

我尝试了很多东西,但都没能成功。

我制作了类show和相关的类Serializable,然后将其写入shows.ser但是当它读取时出错了。

谁能帮我解决这个问题?


共有1个答案

农均
2023-03-14
匿名用户

我解决了你的问题如下。首先,你需要改变你的写作方法。如果数据文件不存在,则需要为流头创建一个常规(无附加)fileoutstream,否则将得到java。木卫一。StreamCorruptedException(参考)<代码>文件输出流的创建方式应与下一次添加不同。

public static void writeShowData(String fileName) {
        String showPath = "E:\\path\\";
        try {
            File file = new File(showPath + fileName);
            ObjectOutputStream oos;
            if(file.exists()) {
                FileOutputStream fos = new FileOutputStream(file.getAbsolutePath(), true); // with reset fos
                oos = new ObjectOutputStream(fos) {
                    protected void writeStreamHeader() throws IOException {
                        reset();
                    }
                };
            } else {
                FileOutputStream fos = new FileOutputStream(file.getAbsolutePath()); // regular fos
                oos = new ObjectOutputStream(fos);
            }
            
            oos.writeObject(show);
            oos.flush();
            oos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

其次,你需要修改你的阅读方法。如果你的FileInputStream有数据,你需要迭代来添加你的列表。

public static void readShowData(String fileName) {
        try {
            FileInputStream fis = new FileInputStream("E:\\path\\" + fileName);
            ObjectInputStream ois = new ObjectInputStream(fis);

            List<Show> shows = new ArrayList<>();
            while (fis.available() > 0) {
                Show s = (Show) ois.readObject();
                System.out.println(s.number);
                shows.add(s);
            }

            ois.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

 类似资料:
  • 我模拟了Jsch()类,并在下面的方法中获得了类强制转换异常。 原始方法。 联机获取Mockito异常。 例外情况: java.lang.ClassCastException:com.jcraft.jsch。频道$MockitoMock$1983492043不能转换为com.jcraft.jsch.ChannelSftp 测试用例调用方法。

  • 例外情况: java.lang.ClassCastException:com.interconnect.library.gcm.util.checkplayServices(util.java:96),com.interconnect.library.gcm.regiseter.handleRegister(regiseter.java:53),com.interconnect.library.g

  • 问题内容: 尝试将结果集强制转换为映射类时,我收到了hibernate类的类强制转换异常…我能够查看返回的结果集中的数据…但是它以Object []的形式返回我可以将Object []设置为List …我可以正确地进行hibernate映射吗?我从查询中获取了正确的数据,但映射不正确… 映射 映射类 参加班 主要 问题答案: 对于测试,我建议您在产生类强制转换异常的语句周围放置一个try-catc

  • 调用AffineTransform: 它驻留在自定义形状类(YingYang)中。 当我进行调用时,当我试图从绘图面板或在类本身(如果我将返回类型更改为YingYang)中将它转换回一个YingYang时,我会得到一个类转换异常。 java.lang.ClassCastException:java.awt.Geom.Path2D$Double不能强制转换为Animation.Yingyang 任何

  • 我想在ViewPager中的片段中设置一些TextViews。当我的片断实例化页面时,我正在它的onActivityCreated函数中设置我的TextViews。根据一些帖子,在getItemPosition中返回POSITION_NONE解决了我的问题,但因为每次都要删除所有视图,所以这不是一个有效的方法。所以我将它改为instatiateItem(ViewGroup container,in