首页 > 解决方案 > 如何将另一个对象序列化为现有文件?

问题描述

我希望能够允许用户通过输入对象的信息并按下按钮来创建对象,而无需先在代码中实例化对象。

我正在使用序列化将用户输入的数据保存在 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();
        }

            }

标签: javaoopserializationsaveuser-input

解决方案


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();
    }

推荐阅读