您的位置:首页 > 编程语言 > Java开发

java中遍历对象流写入的文件

2014-12-10 20:46 190 查看
在用对象序列化写入文件后,特别是多对象的情况。比如说一个学生管理系统,有多个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异常来判定文件是否到末尾了。这样就能实现对对象文件的遍历。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: