Java文件流-ObjectOutputStream ObjectInputStream

Java文件流-ObjectOutputStream ObjectInputStream,java,swing,tablerow,objectinputstream,objectoutputstream,Java,Swing,Tablerow,Objectinputstream,Objectoutputstream,我正在用Java和Swing为电影经理创建一个小GUI 我有一个类MovieTableModel,它扩展了AbstractTableModel,并在对象[][]数据中包含表行的数据。 第二类MovieUI管理JFrame以及GUI。 最后一个类MovieManager实际上只是创建movieui实例并使其可见的一个主要函数 现在我的问题是,到目前为止,数据保存在我的代码中。我希望它能够被加载和保存。如果没有保存文件,应该创建一个,我应该能够添加或删除其中的行。actionlisteners已经设

我正在用Java和Swing为电影经理创建一个小GUI

我有一个类MovieTableModel,它扩展了AbstractTableModel,并在对象[][]数据中包含表行的数据。 第二类MovieUI管理JFrame以及GUI。 最后一个类MovieManager实际上只是创建movieui实例并使其可见的一个主要函数

现在我的问题是,到目前为止,数据保存在我的代码中。我希望它能够被加载和保存。如果没有保存文件,应该创建一个,我应该能够添加或删除其中的行。actionlisteners已经设置好了,我只需要一种方法来处理该文件

因此,GUI如下所示:

这是我尝试过的:

        File tabledata = new File("tabledata.class");
    if (!tabledata.exists()) {
        try {
            tabledata.createNewFile();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
    tabledata.



    FileInputStream in = new FileInputStream("tabledata.class");
    ObjectInputStream input = new ObjectInputStream(in);
    Object data = input.readObject();
    System.out.print(data);
这两种方法都不起作用-我想我确实了解这通常是如何工作的,但我不知道如何将其保存到表中的数据中,特别是因为它保存为对象[],但文件是一个对象。 如果成功了,我如何添加或删除单行


提前感谢您的帮助!:

如果序列化tablemodel或支持tablemodel的对象,则可以稍后读取并将其还原到JTable

当您再次从ObjectInputStream读取对象时,我认为您缺少要保存的正确类型的转换:

FileInputStream in = new FileInputStream("tabledata.class");
ObjectInputStream input = new ObjectInputStream(in);
Object[][] data = (Object[][])input.readObject();

创建新文件后,需要使用ObjectOutputStream写入数据,然后使用ObjectInputStream读取数据

因为它将所有数据存储为一个大数据块,所以我认为不可能只读取/写入一个元素。您必须计算存储对象的字节数,然后跳到正确的位置。如果您真的需要存储大量的表数据,我会使用一些关系数据库作为后端。否则我就不会为这样的优化而烦恼了。只要在保存时重写所有内容

Object[][] data;
//save
File tabledata = new File("tabledata.dat"); //I wouldn't use class extension (class is for compiled Java)
//creation of file omitted
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(tabledata));
out.writeObject(data);
out.close();

//load
ObjectInputStream  in = new ObjectInputStream(new FileInputStream(tabledata));
data = (Object[][]) in.readObject(); //explict cast required
in.close();