java - 如何将另一个对象序列化为现有文件?
问题描述
我希望能够允许用户通过输入对象的信息并按下按钮来创建对象,而无需先在代码中实例化对象。
我正在使用序列化将用户输入的数据保存在 bi 文件中,但每次我尝试保存新对象时,它都会覆盖它
public void addMovie2() throws IOException {
MoviesLinkedList.add(new Movies (textField.getText(), ratings.getSelectedItem(), textField_1.getText()));
Movies movie1 = new Movies(textField.getText(), ratings.getSelectedItem(), textField_1.getText());
String Filename = "MoviesLinkedList.bin";
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(Filename));
os.writeObject(movie1);
os.close();
System.out.println("Done Saving");
}
每当用户按下“添加”按钮时,我都会运行此方法。这适用于 1 个移动对象,每当我想保存多个时,它都会覆盖它。
这是我为读取 JTextArea 中的对象而编写的代码:
String Filename = "MoviesLinkedList.bin";
try {
ObjectInputStream is = new ObjectInputStream(new FileInputStream(Filename));
Movies movie1 = (Movies) is.readObject();
MoviesTextArea.setText("Title: " + movie1.title + " Rating: " + movie1.rating + " Review: " + movie1.review);
is.close();
} catch (IOException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
}
解决方案
FileOutputStream 构造函数之一有一个参数append
。因此只需使用
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(Filename, true));
测试代码:
public static void main(String[] args) throws IOException {
f("first");
f("second");
f("third");
}
private static void f(Object o) throws IOException {
String Filename = "MoviesLinkedList.bin";
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(Filename, true));
os.writeObject(0);
os.close();
}
推荐阅读
- google-cloud-platform - 是否可以使用 GCP VPN 将实例连接到互联网?
- php - PHP - session_start
- python - 在 pandas 数据框中随机排列行,将重复项放在一起
- excel - 如何运行存储过程(身份验证)然后显示查询结果
- gradle - Android资源编译失败-找不到资源文件
- sql - 从链接表更新记录
- r - base::noquote 是公认的使用 dplyr 编程的方式吗?
- ruby-on-rails - 在应用初始化程序中访问 Activeadmin 资源集合
- node.js - 是否有任何可用于 node.js/express.js 项目的样板文件?节点项目应该遵循哪些实践?
- java - 用Java解压压缩的ubuntu lz4文件