今天看了看java.beans包,发现了两个好东西,xmlencoder和xmldecoder。发现自己以前把从xml存取对象真是太费力气啦。做了小工具类,以后可以用用了。
package com.imct.util;
import java.beans.xmldecoder;
import java.beans.xmlencoder;
import java.io.file;
import java.io.fileinputstream;
import java.io.filenotfoundexception;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.util.arraylist;
import java.util.list;
/**
* <title>使用xml文件存取可序列化的对象的类</title>
* <description>提供保存和读取的方法</description>
* @author 殷晋
* <copyright>清华大学汽车工程开发研究院@2005</copyright>
* @version 1.0
* 2005-8-5 16:44:49
*/
public class objecttoxmlutil
{
/**
* 把java的可序列化的对象(实现serializable接口)序列化保存到xml文件里面,如果想一次保存多个可序列化对象请用集合进行封装
* 保存时将会用现在的对象原来的xml文件内容
* @param obj 要序列化的可序列化的对象
* @param filename 带完全的保存路径的文件名
* @throws filenotfoundexception 指定位置的文件不存在
* @throws ioexception 输出时发生异常
* @throws exception 其他运行时异常
*/
public static void objectxmlencoder(object obj,string filename)
throws filenotfoundexception,ioexception,exception
{
//创建输出文件
file fo = new file(filename);
//文件不存在,就创建该文件
if(!fo.exists())
{
//先创建文件的目录
string path = filename.substring(0,filename.lastindexof(.));
file pfile = new file(path);
pfile.mkdirs();
}
//创建文件输出流
fileoutputstream fos = new fileoutputstream(fo);
//创建xml文件对象输出类实例
xmlencoder encoder = new xmlencoder(fos);
//对象序列化输出到xml文件
encoder.writeobject(obj);
encoder.flush();
//关闭序列化工具
encoder.close();
//关闭输出流
fos.close();
}
/**
* 读取由objsource指定的xml文件中的序列化保存的对象,返回的结果经过了list封装
* @param objsource 带全部文件路径的文件全名
* @return 由xml文件里面保存的对象构成的list列表(可能是一个或者多个的序列化保存的对象)
* @throws filenotfoundexception 指定的对象读取资源不存在
* @throws ioexception 读取发生错误
* @throws exception 其他运行时异常发生
*/
public static list objectxmldecoder(string objsource)
throws filenotfoundexception,ioexception,exception
{
list objlist = new arraylist();
file fin = new file(objsource);
fileinputstream fis = new fileinputstream(fin);
xmldecoder decoder = new xmldecoder(fis);
object obj = null;
try
{
while( (obj = decoder.readobject()) != null)
{
objlist.add(obj);
}
}
catch (exception e)
{
// todo auto-generated catch block
}
fis.close();
decoder.close();
return objlist;
}
}