0%

直接把对象存入文件 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;
    }
 
}