每次在java中运行我的程序时如何将对象添加到文件中

时间:2017-11-16 15:32:50

标签: java file object save load

我有3个Person类型的对象,我将它们写入我的文件Person.person,而不是我逐个阅读它们但是当我再次运行我的程序时,我得到了相同的3个objets,当我为它运行时每次我运行我的程序时,如何将这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:  无效的类型代码: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();
}

}

2 个答案:

答案 0 :(得分:1)

fd

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

答案 1 :(得分:0)

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

    FileOutputStream(File file, boolean append)