一个 对象序列化的 例子,请老大帮我看看,有什么问题??
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ObjectStreamTest {
public static void main(String[] args)throws Exception {
String fname = "D:\\Myworkspace\\IOTest\\temp\\stu.txt";
Stu s = new Stu();
List array = new ArrayList();
array.add(new Stu("张三丰",20));
s.save(fname, array); // 第一次保存
array.add(new Stu("曹操",58));
s.save(fname, array); // 第二次保存
array = new ArrayList();
array.add(new Stu("张无忌",25));
s.save(fname, array); // 第三次保存
List array1 = new ArrayList();
array1.add(new Stu("董方卓",22));
s.save(fname, array1); // 第四次保存
System.out.println("==========================================");
s.display(fname);
}
}
/**
* 解决方案 :
* 1、创建一个数组 : ArrayList 然后 把ArrayList进行序列化
* 2、当要保存的时候 ,首先 检索一遍 已经序列化的ArrayList1,形参传进来的 ArrayList2 ,添加到 ArrayList1 中
* 3、重新保存数组
*
* 4、然后读取数组 ,
* */
class Stu implements Serializable{
private int age;
private String name = null;
public Stu(){
}
public Stu(String name,int age){
this.name = name;
this.age = age;
}
public String toString(){
return "姓名:"+this.name+" 年龄:"+this.age;
}
// 保存
public void save(String fname,List array)throws Exception{
File f = new File(fname);
boolean flag = f.createNewFile();
System.out.println(flag);
// 如果为 true 表示 第一次创建
if(flag){
// 否则 直接序列化
FileOutputStream fo = new FileOutputStream(fname);
ObjectOutputStream oo = new ObjectOutputStream(fo);
oo.writeObject(array);
oo.close();
}else{
// 首先 检索一遍文件
FileInputStream fi = new FileInputStream(fname);
ObjectInputStream oi = new ObjectInputStream(fi);
ArrayList list = (ArrayList)oi.readObject();
Iterator it = array.iterator();
while(it.hasNext()){
list.add((Stu)it.next());// 把 要进行 序列化的 对象存在 取出来的 ArrayList 数组中
}
FileOutputStream fo = new FileOutputStream(fname);
ObjectOutputStream oo = new ObjectOutputStream(fo);
oo.writeObject(list);
oo.close();
}
}
public void display(String fname)throws Exception{
FileInputStream fi = new FileInputStream(fname);
ObjectInputStream oi = new ObjectInputStream(fi);
ArrayList array = (ArrayList)oi.readObject();
Iterator it = array.iterator();
while(it.hasNext()){
System.out.println(((Stu)it.next()).toString());
}
}
}