1. 程式人生 > >關於實體類物件與XML的轉換

關於實體類物件與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包