使用 XStream 把 Java 对象序列化为 XML

虽然可以通过dom4j定义属于自己的策略将对象序列到xml文件中,但是thoughtworks公司提供的xstream 包含的功能很强大,一般的功能都涵盖了,而且使用起来也很方便。

 

一.持久化对象

package com.ysen;
//这是一组简单的类。XStream能把这些类的实例转换到XML或是转换回来。
//注意到这些都是私有变量。XStream不关心变量的作用域。不需要getter或是setter方法。并且,XStream不限定需要默认的构造函数
public class Employee {
	 private String name;
	 private String designation;
	 private String department;

	 public String getName() {
	 return name;
	 }
	 public void setName(String name) {
	 this.name = name;
	 }
	 public String getDesignation() {
	 return designation;
	 }
	 public void setDesignation(String designation) {
	 this.designation = designation;
	 }
	 public String getDepartment() {
	 return department;
	 }
	 public void setDepartment(String department) {
	 this.department = department;
	 }
	 @Override
	 public String toString() {
	 return "Name : "+this.name+
	 "\nDesignation : "+this.designation+
	 "\nDepartment : "+this.department;
	 }
	}

 

操作的对象

public class Writer {
	
	 public static void main(String[] args) {
		 Employee e = new Employee();
		 e.setName("Jack");
		 e.setDesignation("Manager");
		 e.setDepartment("Finance");

		 //Serialize the object
		 //实例化XStream
		 //使用XStream,简单实例化XStream类:

		 XStream xs = new XStream();
 // xs.omitField(Employee .class, "name"); //定义某一个属性的值不进行xml序列化。
             // xs.useAttributeFor(String.class);  // 对所有String类型的字段定义为属性tag显示
             // xs.useAttributeFor("name",String.class);// 对所有String类型的字段名成为name 定义为属性tag显示,读取的时候获取不了该值


		 try {
		 FileOutputStream fs = new FileOutputStream("d:/employeedata.xml");
		
		 xs.toXML(e, fs);
		 } catch (FileNotFoundException e1) {
		 e1.printStackTrace();
		 }
		 }


}

 

 

public class ConfigReader {

	 String datasourcename = null;
	 String ipaddress = null;
	 String logfilename = null;
	 String appender = null;

	 @Override
	 public String toString() {
	 // This method prints out the values stored in the member variables
	 return "Datasource Name : "+datasourcename+
	 " \nIP Address : "+ipaddress+
	 " \nLogfilename : "+logfilename+
	 " \nAppender : "+appender;
	 }

	
	 public static void main(String[] args) throws FileNotFoundException {
	 XStream xs = new XStream(new DomDriver());

	 FileInputStream fis = new FileInputStream("d:/Config.xml");
	 //映射将对象属性datasourcename映射到xml别名datasource-name中
	 xs.aliasField("datasource-name", ConfigReader.class, "datasourcename");
	 //这是可选的一步。没有这步XStream也可以很好的起作用,但是XML元素的名字就会包含每个类的全称(包括包名),这将会使生成XML稍大。
	 xs.alias("config", ConfigReader.class);
	 ConfigReader r = (ConfigReader)xs.fromXML(fis);

	 System.out.println(r.toString());
	 }
	}

 

 Config.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<config>
 <datasource-name>IRIS</datasource-name>
 <ipaddress>9.124.74.85</ipaddress>
 <logfilename>DailyLogApplication.log</logfilename>
 <appender>console</appender>
</config>

 

 

 

 

public class Author {
    private String name;
    public Author(String name) {
            this.name = name;
    }
    public String getName() {
            return name;
    }
}

 

public class Entry {
    private String title, description;
    public Entry(String title, String description) {
            this.title = title;
            this.description = description;
    }
}

 

 

 

 

public class Blog {
    private Author writer;
    private List entries = new ArrayList();

    public Blog(Author writer) {
            this.writer = writer;
    }

    public void add(Entry entry) {
            entries.add(entry);
    }

    public List getContent() {
            return entries;
    }
    
    
    public static void main(String[] args) throws FileNotFoundException {

        Blog teamBlog = new Blog(new Author("Guilherme Silveira"));
        teamBlog.add(new Entry("first","My first blog entry."));
        teamBlog.add(new Entry("tutorial","Today we have developed a nice alias tutorial. Tell your friends! NOW!"));
      
        XStream xstream = new XStream(new DomDriver());//不需要XPP3库 

        //System.out.println(xstream.toXML(teamBlog));
        //序列化一个对象到XML
        FileOutputStream fs = new FileOutputStream("d:/Blog.xml");
        xstream.toXML(teamBlog, fs);
        
        //从XML反序列化一个对象
        FileInputStream fis = new FileInputStream("d:/Blog.xml");
        //从xml文件中加载对象是需要new XStream(new DomDriver());
        Blog blog = (Blog)xstream.fromXML(fis);
        System.out.println(blog);
}
}

 

 

你可能感兴趣的:(java,oracle,json,xml,Blog)