直接把对象存入文件 ObjectOutputStream与ObjectInputStream的使用

ObjectOutputStream可以把对象直接存入到文件中,然后利用ObjectInputStream读取文件还原成对象,前提是该对象实现了Serializable接口.由于ObjectInputStream无法判断文件流中对象的数量,所以我们在循环读取的时候,只好写个死循环,然后捕捉EOFException异常,来实现把所有对象读进来.也可以在写入文件时,把所有对象存进ArrayList,然后把这个ArrayList写入文件,这样就不需要判断对象数量了.



package com.pocketdigi;

import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Main {

	public static void main(String[] args) throws IOException {
		FileOutputStream fop=new FileOutputStream("d:/a.txt");
		ObjectOutputStream oos=new ObjectOutputStream(fop);
		People p=new People(1,"zhang");
		oos.writeObject(p);
		p=new People(2,"li");
		oos.writeObject(p);
		p=new People(3,"zhao");
		oos.writeObject(p);
		//写入三个对象
		oos.close();
		//关闭输出流
		FileInputStream fis=new FileInputStream("d:/a.txt");
		ObjectInputStream ois=new ObjectInputStream(fis);
		try {
			while(true){
			People p2=(People)ois.readObject();
			System.out.println(p2);
			}
			//没有办法判断文件中对象的数量,所以,只有通过EOFException异常来中断
			//或者在写入的时候把所有的对象都放到一个ArrayLis里,这样就不需要判断了
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(EOFException e){
			System.out.println("读取结束");
		}
		
	}
	
}
class People implements Serializable{
	//必须实现Serializable接口
	int id;
	String name;
	People(int id,String name){
		this.id=id;
		this.name=name;
	}
 
 
	public String toString(){
		return "id:"+id+" name:"+name;
	}
 
}

© 2011, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记