请看下面的代码
public class xina {
static name[] Name;
public static void main(String[] args) throws Exception {
Name = new name[3];
Name[0] = new name("Hugh", "Jackman");
Name[1] = new name("John", "TRavolta");
Name[2] = new name("Megh", "Ryne");
File ff = new File("object.txt");
FileOutputStream fo = new FileOutputStream(ff.getName());
ObjectOutputStream oo = new ObjectOutputStream(fo);
for (name dd : Name) {
System.out.println(dd.getfistName() + " " + dd.getlastName());
oo.writeObject(dd);
}
oo.close();
FileInputStream fi = new FileInputStream(ff.getName());
ObjectInputStream oi = new ObjectInputStream(fi);
name hh;
try {
while ((hh = (name) oi.readObject()) != null) {
System.out.println(hh.fistName);
}
} catch (EOFException e) {
System.out.println("file ended");
}
}
}
这里“name”是保存名字和姓氏的类。 如何在不使用异常的情况下读取文件。 我的观点是,当没有更多的对象存在时,它试图读取看起来像null检查不足以满足需要。
提前谢谢。
答案 0 :(得分:1)
while ((hh = (name) oi.readObject()) != null) {
问题出在这里。如果您写了null,readObject()
会返回null
,否则返回EOFException
。读取流末尾的正确测试是捕获{{1}}。
答案 1 :(得分:0)
这里的问题是方法InputStream#readObject
没有返回空对象超过EOF它总是抛出Exception
。对此的简单解决方案是serializing
首先传递数组的大小并首先读取大小,然后在de-serializing
时读取该大小的数组。
所以写作时:
oo.writeObject(new Integer(Name.length));
for (name dd : Name) {
System.out.println(dd.getfistName() + " " + dd.getlastName());
oo.writeObject(dd);
}
阅读时:
ObjectInputStream oi = new ObjectInputStream(fi);
Integer size = oi.readObject();
name hh;
for (int i=0;i<size;i++) {
hh= (Name) oi.readObject();
System.out.println(hh.fistName);
}
希望这有帮助。