日期:2014-05-20  浏览次数:20787 次

对象保存到文件问题
自己写了一个链表,
node1--> node2-> node3--> node4-...
想保存到文件,然后读回来
有什么办法?
如果保存对象的ObjectOutstream是不是保存node1就行了?

------解决方案--------------------
ObjectOutstream
ObjectInputstream
不过需要序列化
------解决方案--------------------
up
------解决方案--------------------
如果这个链表是自定义的类型就要实现Serializable接口。
------解决方案--------------------
/**
*
*/
package cn.com.sandpay.report.util;

import java.io.File;
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.util.ArrayList;

/**
* 对象读写工具类
*
* @author zhuwei
* @since 2007-3-19 10:09:53
*/
public class ObjectUtil {

/**
* 读取对象方法
* @param filePath 文件路径
* @param needDelete 是否需要删除
* @return
* @throws Exception
*/
public static Object read(String filePath,boolean needDelete) throws Exception{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(filePath));
Object obj=ois.readObject();
ois.close();
if(needDelete)(new File(filePath)).delete();
return obj;
}

/**
* 写对象
* @param filePath 文件路径
* @param obj 需要存储的对象
* @throws Exception
*/
public static void write(String filePath,Object obj) throws Exception{
File f=new File(filePath);
if(!(f.getParentFile().exists()))f.getParentFile().mkdirs();
ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream(f));
os.writeObject(obj);
os.close();
}


/**
* 测试方法
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//文件路径
String filePath= "d:/aaa.obj ";
//存储的数据
String data0= "测试 ";
ArrayList data1=new ArrayList();
data1.add( "数据1 ");
data1.add( "数据2 ");
ArrayList data2=new ArrayList();
data2.add(data1);
data2.add(data1);
//写对象:如果需要存储多个数据,则用Object[]包装
ObjectUtil.write(filePath,new Object[]{data0,data2});
//读取对象
Object[] tobj=(Object[])ObjectUtil.read(filePath,false);
System.out.println( "0-> "+tobj[0]);
System.out.println( "1-> "+tobj[1]);

}

}

------解决方案--------------------
实现Serializable接口,然后用ObjectOutstream进行文件的写入