每次我 运行 我的程序在 java 时如何向文件添加一个对象

How to add an object to file every time i run my program in java

我有 3 个 Person 类型的对象,我将它们写入我的文件 Person.person 然后我一个一个地读取它们但是当我再次 运行 我的程序时我得到了相同的 3 个对象当我 运行 第一次 time.How 每次我 运行 我的 program.I 希望它是相同的 3 时,它一次又一次地将这 3 个对象添加到我的文件中对象或其他一些对象,但需要将它们添加到我的文件的末尾。

以及当我想读取该文件时如何获取该数据?

 package pisanjeUFajl;

 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.EOFException;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.util.List;

 public class Serilizacija {
 public static void main(String[] args) throws IOException, 
 ClassNotFoundException {

    Person person = new Person("Jovan", "Dukic");
    Person person2 = new Person("Stanko", "Maca");
    Person person3 = new Person("Tole", "Lopove");

    File file = new File("C:\Users\Jovan\Desktop\Person.person");
    if (!(file.exists())) {
        file.createNewFile();
    }

    ObjectOutputStream outputStream = null;

    outputStream = new ObjectOutputStream(new BufferedOutputStream(new 
    FileOutputStream(file)));

    outputStream.writeObject(person);
    outputStream.reset();
    outputStream.writeObject(person2);
    outputStream.reset();
    outputStream.writeObject(person3);
    outputStream.reset();

    outputStream.close();

    ObjectInputStream inputStream = null;

    inputStream = new ObjectInputStream(new BufferedInputStream(new 
    FileInputStream(file)));
    int count = 0;
    Person object = null;

我在我的文件中添加了更多对象,但是当我想阅读它们时,我得到了错误: 线程 "main" java.io.StreamCorruptedException 中的异常: 无效 typecode:AC

at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at pisanjeUFajl.Serilizacija.main(Serilizacija.java:46)

它只读取最先添加到我的文件中的前 3 个对象。

    try {
        while (true) {
            object = (Person) inputStream.readObject();
            count++;
            System.out.println(object);

        }
    } catch (EOFException error) {
        System.out.println("\nEnd of file reacher - objects read = " + 
    count);
    }

    inputStream.close();
}

}

使用接受布尔值作为参数的 FileOutputStream 的构造函数。 如果将其设置为 true,则通过此 Stream 写入文件的所有内容都会附加到现有内容中。构造函数如下所示:

    FileOutputStream(File file, boolean append)
Use for writing object       
ObjectOutputStream  outputStream = new ObjectOutputStream(new 
                        FileOutputStream(new File("test")));



Use it for appending object at end of file 
ObjectOutputStream outputStream2 = new ObjectOutputStream(new FileOutputStream("test", true)) {
                    protected void writeStreamHeader() throws IOException {
                        reset();
                    }
                };

阅读 ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("test"));