为了账号安全,请及时绑定邮箱和手机立即绑定

java - 如何在不覆盖文件中写入的数据的情况下将对象(非字符串类型)附加到现有文件中?

java - 如何在不覆盖文件中写入的数据的情况下将对象(非字符串类型)附加到现有文件中?

回首忆惘然 2021-10-13 15:42:25
在我的 java 代码中,我想在创建它们的那一刻将按摩对象附加到文件中。当我尝试追加一个新对象时,它会覆盖文件中先前添加的数据。有人可以解释一种将对象(不是字符串类型对象)一个接一个地附加到现有文件而不被覆盖的方法吗?对象的构造函数:public class savedEmail{    String email;    String subject;    String date;    public savedEmail(String email,String subject,String date){        this.email = email;        this.subject = subject;        this.date = date;    }}//The way which I tried to append the object to the file: class sentEmail{    public static void save(saveEmail O) throws IOException{ObjectOutputStream op = new ObjectOutputStream(new        FileOutputStream("saved.bin",true));        op.write(0);    }}
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我想解决这个问题的方法是,将所有对象放入一个 ArrayList 并通过对象序列化将该 ArrayList 写入文件。如果要向其中添加新对象,请通过反序列化将保存的 ArrayList 取回,然后附加新对象并将 ArrayList 放回文件。


查看完整回答
反对 回复 2021-10-13
?
茅侃侃

TA贡献1842条经验 获得超21个赞

创建新的 ObjectOutputStream 时会写入初始字节序列或标头。在的Java序列化规范所描述的那样:

溪流:

魔法版内容

因此,每次要追加时都创建一个新的 ObjectOutputStream 不是一种选择。您将需要打开一个单一ObjectOuptutStream,并保持对它的引用。

顺便说一句,op.write(0)(写一个零)与op.write(O)(写出引用在名称为大写字母 O 的变量中的对象)不同。这是O变量名称的一个非常糟糕的选择的原因之一。考虑email改为命名方法参数。


查看完整回答
反对 回复 2021-10-13
  • 2 回答
  • 0 关注
  • 283 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信