JAVA对象序列化保存为XML文件的工具类

java 代码
 
  1. import java.beans.XMLDecoder;  
  2. import java.beans.XMLEncoder;  
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FileOutputStream;  
  7. import java.io.IOException;  
  8. import java.util.ArrayList;  
  9. import java.util.List;  
  10.   
  11. public class ObjectToXMLUtil {  
  12.   
  13.     /** 
  14.      * 把java的可序列化的对象(实现Serializable接口)序列化保存到XML文件里面,如果想一次保存多个可序列化对象请用集合进行封装 
  15.      * 保存时将会用现在的对象原来的XML文件内容 
  16.      *  
  17.      * @param obj 
  18.      *            要序列化的可序列化的对象 
  19.      * @param fileName 
  20.      *            带完全的保存路径的文件名 
  21.      * @throws FileNotFoundException 
  22.      *             指定位置的文件不存在 
  23.      * @throws IOException 
  24.      *             输出时发生异常 
  25.      * @throws Exception 
  26.      *             其他运行时异常 
  27.      */  
  28.     public static void objectXmlEncoder(Object obj, String fileName) {  
  29.         // 创建输出文件  
  30.         File fo = new File(fileName);  
  31.         // 文件不存在,就创建该文件  
  32.         if (!fo.exists()) {  
  33.             // 先创建文件的目录  
  34.             String path = fileName.substring(0, fileName.lastIndexOf('.'));  
  35.             File pFile = new File(path);  
  36.             pFile.mkdirs();  
  37.         }  
  38.         // 创建文件输出流  
  39.         FileOutputStream fos = null;  
  40.         XMLEncoder encoder = null;  
  41.         try {  
  42.             fos = new FileOutputStream(fo);  
  43.             // 创建XML文件对象输出类实例  
  44.             encoder = new XMLEncoder(fos);  
  45.             // 对象序列化输出到XML文件  
  46.             encoder.writeObject(obj);  
  47.             encoder.flush();  
  48.             // 关闭序列化工具  
  49.             encoder.close();  
  50.             // 关闭输出流  
  51.             fos.close();  
  52.         } catch (Exception e) {  
  53.             e.printStackTrace();  
  54.         } finally {  
  55.             if (encoder != null) {  
  56.                 encoder.close();  
  57.             }  
  58.             if (fos != null) {  
  59.                 try {  
  60.                     fos.close();  
  61.                 } catch (IOException e) {  
  62.                     e.printStackTrace();  
  63.                 }  
  64.             }  
  65.         }  
  66.     }  
  67.   
  68.     /** 
  69.      * 读取由objSource指定的XML文件中的序列化保存的对象,返回的结果经过了List封装 
  70.      *  
  71.      * @param objSource 
  72.      *            带全部文件路径的文件全名 
  73.      * @return 由XML文件里面保存的对象构成的List列表(可能是一个或者多个的序列化保存的对象) 
  74.      * @throws FileNotFoundException 
  75.      *             指定的对象读取资源不存在 
  76.      * @throws IOException 
  77.      *             读取发生错误 
  78.      * @throws Exception 
  79.      *             其他运行时异常发生 
  80.      */  
  81.     public static List objectXmlDecoder(String objSource) {  
  82.         List objList = new ArrayList();  
  83.         File fin = new File(objSource);  
  84.         FileInputStream fis = null;  
  85.         XMLDecoder decoder = null;  
  86.         try {  
  87.             fis = new FileInputStream(fin);  
  88.             decoder = new XMLDecoder(fis);  
  89.             Object obj = null;  
  90.             while ((obj = decoder.readObject()) != null) {  
  91.                 objList.add(obj);  
  92.             }  
  93.             fis.close();  
  94.             decoder.close();  
  95.         } catch (Exception e1) {  
  96.             e1.printStackTrace();  
  97.         } finally {  
  98.             if (decoder != null) {  
  99.                 decoder.close();  
  100.             }  
  101.             if (fis != null) {  
  102.                 try {  
  103.                     fis.close();  
  104.                 } catch (IOException e) {  
  105.                     e.printStackTrace();  
  106.                 }  
  107.             }  
  108.         }  
  109.         return objList;  
  110.     }  
  111.   
  112. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值