Java文件流-ObjectOutputStream ObjectInputStream
我正在用Java和Swing为电影经理创建一个小GUI 我有一个类MovieTableModel,它扩展了AbstractTableModel,并在对象[][]数据中包含表行的数据。 第二类MovieUI管理JFrame以及GUI。 最后一个类MovieManager实际上只是创建movieui实例并使其可见的一个主要函数 现在我的问题是,到目前为止,数据保存在我的代码中。我希望它能够被加载和保存。如果没有保存文件,应该创建一个,我应该能够添加或删除其中的行。actionlisteners已经设置好了,我只需要一种方法来处理该文件 因此,GUI如下所示: 这是我尝试过的:Java文件流-ObjectOutputStream ObjectInputStream,java,swing,tablerow,objectinputstream,objectoutputstream,Java,Swing,Tablerow,Objectinputstream,Objectoutputstream,我正在用Java和Swing为电影经理创建一个小GUI 我有一个类MovieTableModel,它扩展了AbstractTableModel,并在对象[][]数据中包含表行的数据。 第二类MovieUI管理JFrame以及GUI。 最后一个类MovieManager实际上只是创建movieui实例并使其可见的一个主要函数 现在我的问题是,到目前为止,数据保存在我的代码中。我希望它能够被加载和保存。如果没有保存文件,应该创建一个,我应该能够添加或删除其中的行。actionlisteners已经设
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();