在我的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);
}
}
答案 0 :(得分:0)
创建新的ObjectOutputStream时,将写入字节的初始序列或 header 。 Java Serialization Specification描述了它:
流:
魔术版本内容
因此,每次要附加一个新的ObjectOutputStream都不是一种选择。您将需要打开单个 ObjectOuptutStream,并保留对其的引用。
顺便说一句,op.write(0)
(写零)与op.write(O)
(写引用其对象在名称为大写字母O的对象中)不同。这是O
对于变量名的选择很差的一个原因。考虑改为命名方法参数email
。
答案 1 :(得分:0)
我想出解决这个问题的方法是,将所有对象放入ArrayList,然后通过对象序列化将该ArrayList写入文件。如果要向其添加新对象,请通过反序列化将保存的ArrayList取回,然后附加新对象并将ArrayList放回文件中。