黑马程序员技术交流社区

标题: 对象写进文件 [打印本页]

作者: 黑白涩    时间: 2016-2-21 16:46
标题: 对象写进文件
话说把对象写进文件中一共分几步,或者把一个集合写进文件中存起来,重点是要提取使用,用哪个流可以直接操作呢?
作者: heimagirls    时间: 2016-2-21 18:53
一般是用Java序列化与反序列化来实现,用ObjectInputStream来实现
序列化步骤:

1:创建一个对象输出流,它可以包装一个其它类型的目标输出流,如文件输出流:

2:通过对象输出流的writeObject()方法写对象:

反序列化步骤:

1:创建一个对象输入流,它可以包装一个其它类型输入流,如文件输入流:

2:通过对象输出流的readObject()方法读取对象:

     正确读取数据,完成反序列化,必须保证向对象输出流写对象的顺序与从对象输入流中读对象的顺序一致。
作者: heimagirls    时间: 2016-2-21 21:52
给个例子你吧,可以运行

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

public class MyTest implements Serializable
{
    private static final long serialVersionUID = 1L;
    private String name="SheepMu";
    private int age=24;
    public static void main(String[] args)
    {//以下代码实现序列化
        try
        {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/my.out"));//输出流保存的文件名为 my.out ;ObjectOutputStream能把Object输出成Byte流
            MyTest myTest=new MyTest();
            oos.writeObject(myTest);
            oos.flush();  //缓冲流
            oos.close(); //关闭流
        } catch (FileNotFoundException e)
        {        
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
        fan();//调用下面的  反序列化  代码
    }
    public static void fan()//反序列的过程
    {   
         ObjectInputStream oin = null;//局部变量必须要初始化
        try
        {
            oin = new ObjectInputStream(new FileInputStream("my.out"));
        } catch (FileNotFoundException e1)
        {        
            e1.printStackTrace();
        } catch (IOException e1)
        {
            e1.printStackTrace();
        }      
        MyTest mts = null;
        try {
            mts = (MyTest ) oin.readObject();//由Object对象向下转型为MyTest对象
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }     
         System.out.println("name="+mts.name);   
         System.out.println("age="+mts.age);   
    }
}
作者: heimagirls    时间: 2016-2-22 09:38
oin = new ObjectInputStream(new FileInputStream("my.out"));  这句文件路径写错了,改成
oin = new ObjectInputStream(new FileInputStream("d:/my.out"));

要读取多个对象,可以这样是下面这样:

//读取结束标志位:是再次读取一个对象,判定对象是否是空,如果不为null继续读取,如果为null停止读取;
            while((object=objectInputStream.readObject()) != null){
                //对object进行处理
                ......
            }






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2