关于实体类对象与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

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;
    }
}
3。编写功能实现类

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();

    }
}

运行即可



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


完整源码 http://download.csdn.net/detail/sdsky1987/4042378

附带jar包

猜你喜欢

转载自blog.csdn.net/sdsky1987/article/details/7230461
今日推荐