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

时间:2018-09-26 20:16:42

标签: java

在我的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 个答案:

答案 0 :(得分:0)

创建新的ObjectOutputStream时,将写入字节的初始序列或 header Java Serialization Specification描述了它:

  

流:

     

魔术版本内容

因此,每次要附加一个新的ObjectOutputStream都不是一种选择。您将需要打开单个 ObjectOuptutStream,并保留对其的引用。

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

答案 1 :(得分:0)

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