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;
/*******************************************************************************
* 序列化对象到xml文件
*
* @author zzbk_c8
*
*/
public class ObjectToXMLUtil {
/***************************************************************************
* 序列化方法
*
* @param obj序列化对象
* @param fileName存放地址
*/
public static void objectXmlEncoder(Object obj, String fileName) {
// 创建文件
File file = new File(fileName);
// 判断文件是否存在,如不存在创建
if (!file.exists()) {
// 先创建文件目录
File filePath = new File(fileName.substring(0, fileName
.lastIndexOf("/")));
filePath.mkdirs();
}
try {
// 创建文件的输出流
FileOutputStream out = new FileOutputStream(fileName);
// 创建XML文件对象输出类
XMLEncoder xmlEncoder = new XMLEncoder(out);
// 利用xml对象输出类输出对象到xml文件
xmlEncoder.writeObject(obj);
xmlEncoder.flush();
// 关闭输出对象
xmlEncoder.close();
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("文件输出流关闭错误");
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("文件输出流创建失败");
e.printStackTrace();
}
}
/***************************************************************************
* 反序列化
*
* @param objSource
* xml文件,反序列化内容
* @return 返回集合
*/
public static List objectXmlDecoder(String objSource) {
// 用于接收从xml中凡序列化出来的集合
List objList = new ArrayList();
// 获取xml对象文件资源(反序列化文件)
File filein = new File(objSource);
try {
// 创建从xml文件读取的输入流
FileInputStream fis = new FileInputStream(filein);
// 创建xml解析对象(反序列化对象)并利用参数指定解析内容
XMLDecoder xmlDecoder = new XMLDecoder(fis);
// 从xml解析对象中 凡序列话得到 内存对象(集合)
Object obj = null;
if ((obj = xmlDecoder.readObject()) != null) {
objList.add(obj);
}
fis.close();
xmlDecoder.close();
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("输入流异常");
e.printStackTrace();
}
return objList;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "aaaaaaaaaaa";
List<String> ls = new ArrayList<String>();
ls.add("aaaaaaa");
ls.add("bbbbbbbbbb");
ls.add("cccccc");
ObjectToXMLUtil.objectXmlEncoder(ls, "d:xml/a.xml");
List list = ObjectToXMLUtil.objectXmlDecoder("d:xml/a.xml");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}