在用对象序列化写入文件后,特别是多对象的情况。比如说一个学生管理系统,有多个person,要想把所有的学生都数据都存储在一个文件中,可以有两种方法:
一、把所有学生的数据都存储在一个容器中,然后将这个容器一个对象写入文件,再用对象的反序列化从文件中读取出来就行了。(这里就不多说了)
二、把每个学生的数据(每个对象)一次存进文件中,这时文件就有多个对象存在了,要想把这些对象一个一个的读取出来,就需要用到这个文件。
比如说学生的数据为一个类:
public class stu{
private String name;
private String sex;
private int age;
public stu(String name, String sex, int age){
this.name = name;
this.sex = sex;
this.age = age;
}
//get、set方法省略
}
我们写入时就是这样写入:
ObjectOutputStream obs = null;
try{
obs = new ObjectOutputStream(new FileOutputStream("d://student.tmp"));
stu student= null;
student= new stu("2013081237", "张三", 25);
obs.writeObject(student);
obs.flush();
student= new stu("2013081238", "李四", 26);
obs.writeObject(student);
obs.flush();
student= new stu("2013081239", "王五", 27);
obs.writeObject(student);
obs.flush();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
obs.close();
}catch(Exception e){
e.printStackTrace();
}
}
读取时用readObject()方法到文件末尾时不会反回-1之类的标识,这时遍历方法可以用EOFException来解决文件结束的问题。代码如下:
try{
while(true){
obj = ois.readObject();
student= (stu)obj;
System.out.println("姓名为:" + student.getName());
System.out.println("性别为:" + student.getSex());
System.out.println("年龄为:" + student.getAge());
}
}catch(EOFException e){
e.printStackTrace();
System.out.println("结束");
} 通过抛出的EOFException异常来判定文件是否到末尾了。这样就能实现对对象文件的遍历。