【发布时间】:2018-10-13 08:58:15
【问题描述】:
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Scanner;
public class FileDemo implements Serializable
{
static ArrayList<FileDemo> list=new ArrayList<FileDemo>();
public static void main(String[] args) throws Exception
{
File file=new File("log.txt");
if(!file.createNewFile() && file.length()!=0)
{
FileInputStream fis=new FileInputStream("log.txt");
ObjectInputStream ois=new ObjectInputStream(fis);
while(true)
{
try{
list.add((FileDemo)ois.readObject());
}
catch(EOFException e) {
break;
}
catch(Exception e) {
e.printStackTrace();
break;
}
}
ois.close();
fis.close();
}
Scanner scn=new Scanner(System.in);
int x=0;
while(x!=3)
{
System.out.println("MENU");
System.out.println("Enter 1 to add new object to file");
System.out.println("Enter 2 to display list size");
System.out.println("Enter 3 to exit");
System.out.print("Enter your choice: ");
x=scn.nextInt();
if(x==1)
{
FileDemo filedemo=new FileDemo();
list.add(filedemo);
FileOutputStream fos=new FileOutputStream("log.txt",true);
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(filedemo);
oos.close();
fos.close();
System.out.println("Object Created");
}
else if(x==2)
{
System.out.println(list.size());
}
else if(x==3)
break;
else
System.out.println("Invaild choice");
}
}
}
嗨, 在这个程序中,每次用户在菜单中输入选项 1 时,都会创建一个新的类对象,将其保存到列表中并保存到文件中。当我尝试在下一次执行程序时从文件中读取对象时,它只会从文件中读取第一个对象,并且在下一次 readObject() 调用时会引发如下异常:
java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at FileDemo.main(FileDemo.java:25)
我想知道如何读取文件中存储的所有对象并将它们添加到列表中。
谢谢你, 克莱门特
【问题讨论】:
标签: java fileinputstream fileoutputstream objectoutputstream