每次我 运行 我的程序在 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"));
我有 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"));