一个 对象序列化的 例子,请老大帮我看看,有什么问题??

lklkdawei 2007-10-10 09:46:51
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());
}
}
}
...全文
71 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈宝峰 2007-10-12
  • 打赏
  • 举报
回复
这样的写法不能说有什么问题,但是一般不这么实现,首先第一,Stu类一般专门用来保存人的信息,所以建议定义一个专门的类。比如说:
public class Student implements Serializable {
private String name;
private int age;
...
//下面写set和get方法
...
}
再转么写一个类来负责文件的读写,比如说:
public class FileUtil {
public void save(String fname, Collection students) {
//保存内容的时候不建议直接保存ArrayList的对象,因为这个对象是系统提供的,将来升级什么的都是不可控制的,所以我们宁愿将其中的Student对象一个个写入到文件中,将来一个个读出来就可以了
Iterator it = students.iterator();
while(it.hasNext()) {
//write(it.next());
}
}
}
说得比较简单,单元表达出了我的想法。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧