使用 XStream不用任何映射就能实现多数 Java 对象的序列化,却不关心序列化/逆序列化的类的字段的可见性,序列化/逆序列化类的字段也不需要 getter 和 setter 方法,序列化/逆序列化的类不需要有默认构造函数。
3。编写功能实现类
使用 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
- package com.entity;
- /**
- *
- * 实体类
- *
- * @author 莫小哆_ly 2012-2-3
- */
- public class User {
- private String userName;
- private String passWord;
- private String registeredTime;
- public User() {
- }
- public User(String userName, String passWord, String registeredTime) {
- this.userName = userName;
- this.passWord = passWord;
- this.registeredTime = registeredTime;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getPassWord() {
- return passWord;
- }
- public void setPassWord(String passWord) {
- this.passWord = passWord;
- }
- public String getRegisteredTime() {
- return registeredTime;
- }
- public void setRegisteredTime(String registeredTime) {
- this.registeredTime = registeredTime;
- }
- }
- package com.switcher;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import com.entity.User;
- import com.thoughtworks.xstream.XStream;
- /**
- *
- * 使用 XStream不用任何映射就能实现多数 Java 对象的序列化。
- *
- * 在生成的 XML中对象名变成了元素名,类中的字符串组成了 XML中的元素内容。
- *
- * 使用 XStream 序列化的类不需要实现 Serializable 接口。
- *
- * XStream 是一种序列化工具而不是数据绑定工具
- *
- * 不能从XML 或者 XML Schema Definition (XSD) 文件生成类。
- *
- * @author 莫小哆_ly 2012-2-3
- */
- public class SwitchXML {
- /*
- * XStream 不关心序列化/逆序列化的类的字段的可见性。
- *
- * 序列化/逆序列化类的字段不需要 getter 和 setter 方法。
- *
- * 序列化/逆序列化的类不需要有默认构造函数。
- */
- private XStream xStream = new XStream();
- private String xmlPath = "D:/userdata.xml";
- // 1. obj -> xml(object类型转换为xml类型)
- public String printXML(User user) {
- System.out.println("obj -> xml");
- String xml = xStream.toXML(user);
- System.out.println(xml);
- return xml;
- }
- // 2. xml->obj(xml类型转换为object类型,并打印)
- public void printObj(String xml) {
- System.out.println("xml -> obj");
- User u = (User) xStream.fromXML(xml);
- System.out.println(u.getUserName() + " " + u.getPassWord() + " " + u.getRegisteredTime());
- }
- // 3. 将object类型转换为xml类型,并写入XML文件(其他格式也可以,比如txt文件)
- public void writerXML(User user) {
- try {
- FileOutputStream fs = new FileOutputStream(xmlPath);
- xStream.toXML(user, fs);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- // 4. 读取XML文件,加载进相应Object类型
- public void readerXML() {
- User user = new User();
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(xmlPath);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- xStream.fromXML(fis, user);
- // 打印对象信息
- System.out.println(user.toString());
- // 打印对象的属性值
- System.out.println(user.getUserName() + "-" + user.getPassWord() + "-"
- + user.getRegisteredTime());
- }
- public static void main(String[] args) {
- // 用户名
- String username = "admin";
- // 密码
- String password = "admin";
- // 注册时间
- Date now = new Date();
- SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
- String registeredtime = format.format(now);
- User user = new User(username, password, registeredtime);
- SwitchXML switchXML = new SwitchXML();
- // 1. object类型转换为xml类型,在控制台打印
- String xml = switchXML.printXML(user);
- System.out.println("---------------------");
- // 2. xml类型转换为object类型,在控制台打印
- switchXML.printObj(xml);
- System.out.println("---------------------");
- // 3. 将object类型转换为xml类型,并写入XML文件
- switchXML.writerXML(user);
- System.out.println("---------------------");
- // 4. 读取XML文件,加载进相应Object类型
- switchXML.readerXML();
- }
- }
运行即可