关于实体类对象与XML的转换

使用 XStream不用任何映射就能实现多数 Java 对象的序列化,却不关心序列化/逆序列化的类的字段的可见性,序列化/逆序列化类的字段也不需要 getter 和 setter 方法,序列化/逆序列化的类不需要有默认构造函数。

使用 XStream 序列化的类不需要实现 Serializable 接口。

在生成的 XML中对象名变成了元素名,类中的字符串组成了 XML中的元素内容。

XStream 是一种序列化工具而不是数据绑定工具,不能从XML 或者 XML Schema Definition (XSD) 文件生成类。

本例实现了以下4种基本功能:

1. object类型转换为xml类型,在控制台打印

2. xml类型转换为object类型,在控制台打印

3. 将object类型转换为xml类型,并写入XML文件

4. 读取XML文件,加载进相应Object类型

=================================================================================================

1。加载 XStream 需要的jar包 xstream-1.4.2.jar

xpp3_min-1.1.4c.jar

xmlpull-1.1.3.1.jar

2。创建实体类User.java

  1. package com.entity;  
  2.   
  3. /** 
  4.  *  
  5.  * 实体类 
  6.  *  
  7.  * @author 莫小哆_ly 2012-2-3 
  8.  */  
  9. public class User {  
  10.   
  11.     private String userName;  
  12.   
  13.     private String passWord;  
  14.   
  15.     private String registeredTime;  
  16.   
  17.     public User() {  
  18.   
  19.     }  
  20.   
  21.     public User(String userName, String passWord, String registeredTime) {  
  22.         this.userName = userName;  
  23.         this.passWord = passWord;  
  24.         this.registeredTime = registeredTime;  
  25.     }  
  26.   
  27.     public String getUserName() {  
  28.         return userName;  
  29.     }  
  30.   
  31.     public void setUserName(String userName) {  
  32.         this.userName = userName;  
  33.     }  
  34.   
  35.     public String getPassWord() {  
  36.         return passWord;  
  37.     }  
  38.   
  39.     public void setPassWord(String passWord) {  
  40.         this.passWord = passWord;  
  41.     }  
  42.   
  43.     public String getRegisteredTime() {  
  44.         return registeredTime;  
  45.     }  
  46.   
  47.     public void setRegisteredTime(String registeredTime) {  
  48.         this.registeredTime = registeredTime;  
  49.     }  
  50. }  
3。编写功能实现类
  1. package com.switcher;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.FileOutputStream;  
  6. import java.text.SimpleDateFormat;  
  7. import java.util.Date;  
  8.   
  9. import com.entity.User;  
  10.   
  11. import com.thoughtworks.xstream.XStream;  
  12.   
  13. /** 
  14.  *  
  15.  * 使用 XStream不用任何映射就能实现多数 Java 对象的序列化。 
  16.  *  
  17.  * 在生成的 XML中对象名变成了元素名,类中的字符串组成了 XML中的元素内容。 
  18.  *  
  19.  * 使用 XStream 序列化的类不需要实现 Serializable 接口。 
  20.  *  
  21.  * XStream 是一种序列化工具而不是数据绑定工具 
  22.  *  
  23.  * 不能从XML 或者 XML Schema Definition (XSD) 文件生成类。 
  24.  *  
  25.  * @author 莫小哆_ly 2012-2-3 
  26.  */  
  27. public class SwitchXML {  
  28.   
  29.     /* 
  30.      * XStream 不关心序列化/逆序列化的类的字段的可见性。 
  31.      *  
  32.      * 序列化/逆序列化类的字段不需要 getter 和 setter 方法。 
  33.      *  
  34.      * 序列化/逆序列化的类不需要有默认构造函数。 
  35.      */  
  36.     private XStream xStream = new XStream();  
  37.   
  38.     private String  xmlPath = "D:/userdata.xml";  
  39.   
  40.     // 1. obj -> xml(object类型转换为xml类型)  
  41.     public String printXML(User user) {  
  42.         System.out.println("obj -> xml");  
  43.         String xml = xStream.toXML(user);  
  44.         System.out.println(xml);  
  45.         return xml;  
  46.     }  
  47.   
  48.     // 2. xml->obj(xml类型转换为object类型,并打印)  
  49.     public void printObj(String xml) {  
  50.         System.out.println("xml -> obj");  
  51.         User u = (User) xStream.fromXML(xml);  
  52.         System.out.println(u.getUserName() + " " + u.getPassWord() + " " + u.getRegisteredTime());  
  53.     }  
  54.   
  55.     // 3. 将object类型转换为xml类型,并写入XML文件(其他格式也可以,比如txt文件)  
  56.     public void writerXML(User user) {  
  57.         try {  
  58.             FileOutputStream fs = new FileOutputStream(xmlPath);  
  59.             xStream.toXML(user, fs);  
  60.         } catch (FileNotFoundException e) {  
  61.             e.printStackTrace();  
  62.         }  
  63.     }  
  64.   
  65.     // 4. 读取XML文件,加载进相应Object类型  
  66.     public void readerXML() {  
  67.         User user = new User();  
  68.         FileInputStream fis = null;  
  69.         try {  
  70.             fis = new FileInputStream(xmlPath);  
  71.         } catch (FileNotFoundException e) {  
  72.             e.printStackTrace();  
  73.         }  
  74.         xStream.fromXML(fis, user);  
  75.         // 打印对象信息  
  76.         System.out.println(user.toString());  
  77.         // 打印对象的属性值  
  78.         System.out.println(user.getUserName() + "-" + user.getPassWord() + "-"  
  79.                 + user.getRegisteredTime());  
  80.     }  
  81.   
  82.     public static void main(String[] args) {  
  83.         // 用户名  
  84.         String username = "admin";  
  85.         // 密码  
  86.         String password = "admin";  
  87.         // 注册时间  
  88.         Date now = new Date();  
  89.         SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");  
  90.         String registeredtime = format.format(now);  
  91.   
  92.         User user = new User(username, password, registeredtime);  
  93.         SwitchXML switchXML = new SwitchXML();  
  94.   
  95.         // 1. object类型转换为xml类型,在控制台打印  
  96.         String xml = switchXML.printXML(user);  
  97.         System.out.println("---------------------");  
  98.         // 2. xml类型转换为object类型,在控制台打印  
  99.         switchXML.printObj(xml);  
  100.         System.out.println("---------------------");  
  101.         // 3. 将object类型转换为xml类型,并写入XML文件  
  102.         switchXML.writerXML(user);  
  103.         System.out.println("---------------------");  
  104.         // 4. 读取XML文件,加载进相应Object类型  
  105.         switchXML.readerXML();  
  106.   
  107.     }  
  108. }  

运行即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值