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

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;

/**
 * <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;
 }
}

时间: 2024-08-24 10:20:35

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

写了一个Java读取XML文件的工具类

xml 如果我们有下面的一个XML文件,可以把它想象成一个Relation Database中的Table, 这个XML文件就是一个名字为managers的关系表,而一个<manager>所包含的就是一条记录(Record),而manager中的service和implementation就是一个个的栏位(Field) ! managers table  +  service implementation net.csdn.blog.xport.IDBConnectionManager net

使用JXPath访问java对象、集合和XML文件

一.JXPath简介 JXPath是apache公司提供的XPath的java实现,属于jakarta的一部分,最新的版本是1.1,JXPath的主要功能在于一组java类库来使用XPath的方式访问符合JavaBeans规范的java类.java集合(Collections).其他具有动态属性的对象(如Map.ServletContext等),同时提供了一套扩展机制使我们可以增加对这些对象之外的其他对象模型的支持. [注] 1.关于XPath的更多内容请大家访问XPath的主页 asp">

Ajax 的 Java 对象序列化

ajax|对象 如果您正在使用异步 JavaScript 和 XML(Ajax)进行 Java Web 开发,那么您最关心的问题可能就是把数据从服务器传递给客户机.在面向 Java 开发人员的 Ajax 系列的文章中,Philip McCarthy 介绍了 Java 对象序列化的五种方式,并提供了选择最适合应用程序的数据格式和技术所需要的全部信息.本文将侧重于许多 Java Web 开发人员最关心的问题:为客户机生成数据. 多数 Java 开发人员已经把模型-视图-控制器(MVC)模式应用在他们

java对象序列化学习笔记

java对象|笔记 目前网络上关于对象序列化的文章不少,但是我发现详细叙述用法和原理的文章太少.本人把自己经过经验总结和实际运用中的体会写成的学习笔记贡献给大家.希望能为整个java社区的繁荣做一点事情.    序列化的过程就是对象写入字节流和从字节流中读取对象.将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机.对象序列化功能非常简单.强大,在RMI.Socket.JMS.EJB都有应用.对象序列化问题在网

Java对象序列化使用基础

所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象.这个过程也可以通过网络实现,可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一台Unix机器,然后在那里准确无误地重新"装配".像RMI.Socket.JMS.EJB它们中的一种,彼此为什么能够传递Java对象,当然都是对象序列化机制的功劳. Java对象序列化机制一般来讲有两种用途: Java的JavaBeans: Bean的状态信息通常是在设计时配置的,Bean的状态信息必须被

Ajax 的 Java 对象序列化(1)

ajax|对象 如果您正在使用异步 JavaScript 和 XML(Ajax)进行 Java Web 开发,那么您最关心的问题可能就是把数据从服务器传递给客户机. 在面向 Java 开发人员的 Ajax 系列的文章中,Philip McCarthy 介绍了 Java 对象序列化的五种方式,并提供了选择最适合应用程序的数据格式和技术所需要的全部信息.本文将侧重于许多 Java Web 开发人员最关心的问题:为客户机生成数据. 多数 Java 开发人员已经把模型-视图-控制器(MVC)模式应用在他

如何把DataSet保存为XML文件

xml XML和.NET是完全融合的,很多.NET的服务器控件都具备了一种或更多种创建XML文件的能力,DataSet类就包含若干种创建XML文件的方法,在这篇文章中,我们将创建DataSet与XML之间的连接的例子,而这个例子的作用就是从数据库里读出数据填入DataSet对象中,然后再从DataSet对象输出为XML文件保存到磁盘里,当然了 ,我们还可以为XML文件创建与它相关的schema文件.   把DataSet保存为XML文件中的asp.net页面文件(.aspx),简单的甚至可以用可

Java对象序列化/反序列化的注意事项(转)

Java对象序列化     对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久化的,将运行中的对象状态保存下来(最直接的方式就是保存到文件系统中),在需要的时候可以还原,即使是在Java虚拟机退出的情况下.     对象序列化机制是Java内建的一种对象持久化方式,可以很容易实现在JVM中的活动对象与字节数组(流)之间进行转换,使用得Java对象可以被存储,可以被网络

关于Java对象序列化您不知道的5件事

数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会 到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 大约一年前,一个负责管理应用程序所有用户设置的开发人员,决定将用户 设置存储在一个 Hashtable 中,然后将这个 Hashtable 序列化到磁盘,以便持 久化.当用户更改设置时,便重新将 Hashtable 写到磁盘. 这是一个优雅的.开放式的设置系统,但是,当团队决定从 Hashtable 迁移 到 Java Collections 库中的