JAVA對象序列化保存為XML文件的工具類
今天看了看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; /** * * * @author 殷晉 * * @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; } } |