關於實體類物件與XML的轉換
阿新 • • 發佈:2019-01-06
使用 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
3。編寫功能實現類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();
}
}
執行即可
====================================================================
完整原始碼 http://download.csdn.net/detail/sdsky1987/4042378
附帶jar包