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;
}
}