// 读入文件
FileInputStream reader = new FileInputStream("accout.txt");
ObjectInputStream bbr = new ObjectInputStream(reader);
Object object;
while((object = bbr.readObject()) != null ){
AccoutBean bean = (AccoutBean)object;
System.out.println(bean);
}
会有
Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at homework_2_6.HomeWork_2_6_2v.readerAcctinfo(HomeWork_2_6_2v.java:128)
at homework_2_6.HomeWork_2_6_2v.main(HomeWork_2_6_2v.java:108)
错误。
如果用 available() 判断是否读完是没有用的。
这里有3种解决方法:
1、在写入的时候,
// 写入账户信息文件
FileOutputStream write = new FileOutputStream("accout.txt");
ObjectOutputStream bw = new ObjectOutputStream(write);
for(int i =0; i < accouts.length; i++){
bw.writeObject(accouts[i]);
}
bw.writeObject(null);
bw.close();
write.close();
最后写入 bw.writeObject(null);
2、将若干个对象(数量不定)都装入一个容器中(如:ArrayList之类),然后将容器这一个对象写入就行了。读取时,只要读取一个对象(即容器对象)就行了。
写入时:
// 写入账户信息文件
FileOutputStream write = new FileOutputStream("accout.txt");
ObjectOutputStream bw = new ObjectOutputStream(write);
bw.writeObject(accouts);
// for(int i =0; i < accouts.length; i++){
// bw.writeObject(accouts[i]);
// }
//
// bw.writeObject(null);
bw.close();
write.close();
直接写入 accouts 数据对象。 我用的例子是 数据。
读入的时候改成:
// 读入文件
FileInputStream reader = new FileInputStream("accout.txt");
ObjectInputStream bbr = new ObjectInputStream(reader);
// while((object = bbr.readObject()) != null ){
// AccoutBean bean = (AccoutBean)object;
// System.out.println(bean);
// }
AccoutBean[] accouts = (AccoutBean[]) bbr.readObject();
for(AccoutBean acct:accouts){
System.out.println(acct);
}
3、直接捕获异常 EOFException,就不举例子了。
参看:http://bbs.csdn.net/topics/300140830