下面代码实现了以下4种基本功能:
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
/**
* 实体类
*/
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) 文件生成类。
*/
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()
}
import java.beans.XMLDecoderimport java.beans.XMLEncoder
import java.io.BufferedInputStream
import java.io.BufferedOutputStream
import java.io.File
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
public class Object2XML {
public static String object2XML(Object obj, String outFileName)
throws FileNotFoundException {
// 构造输出XML文件的字节输出流
File outFile = new File(outFileName)
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(outFile))
// 构造一个XML编码器
XMLEncoder xmlEncoder = new XMLEncoder(bos)
// 使用XML编码器写对象
xmlEncoder.writeObject(obj)
// 关闭编码器
xmlEncoder.close()
return outFile.getAbsolutePath()
}
public static Object xml2Object(String inFileName)
throws FileNotFoundException {
// 构造输入的XML文件的字节输入流
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(inFileName))
// 构造一个XML解码器
XMLDecoder xmlDecoder = new XMLDecoder(bis)
// 使用XML解码器读对象
Object obj = xmlDecoder.readObject()
// 关闭解码器
xmlDecoder.close()
return obj
}
public static void main(String[] args) throws IOException {
// 构造一个StudentBean对象
StudentBean student = new StudentBean()
student.setName("wamgwu")
student.setGender("male")
student.setAge(15)
student.setPhone("55556666")
// 将StudentBean对象写到XML文件
String fileName = "AStudent.xml"
Object2XML.object2XML(student, fileName)
// 从XML文件读StudentBean对象
StudentBean aStudent = (StudentBean)Object2XML.xml2Object(fileName)
// 输出读到的对象
System.out.println(aStudent.toString())
}
}