1. 程式人生 > >XStream--java對象與xml形式文件相互轉換

XStream--java對象與xml形式文件相互轉換

初始化 log style pri output 互轉 group fix drive

1.pom.xml中添加依賴

<dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.7</version>
        </dependency>

2.創建xmlUtil類,並對XStream配置

  2.1 解決雙下劃線:XStream把對象中的屬性如person_name轉成xml格式時會出現<person__name>,這種雙下劃線

    此時用這種方式可以將雙下劃線代替成單下劃線

//解決雙下劃線
    public static final XmlFriendlyNameCoder nameCoder = new XmlFriendlyNameCoder("-_", "_");

  2.2 編碼格式:

// 編碼格式
    private static final String ENCODING = "UTF-8";

  2.3 使用dom解析方式

 // dom解析驅動
    private static final DomDriver fixDriver = new DomDriver(ENCODING, nameCoder);

  2.4 通用解析器,把配置都放到XStream對象中

 // 通用解析器
    public static final XStream XSTREAM = new XStream(fixDriver);

  2.5 對象中有日期註意時區處理

//時區
    private static final String CHINA_TIME_ZONE = "Asia/Shanghai";

  2.6 初始化XStream

 static {
        // 時區處理
        TimeZone zone = TimeZone.getTimeZone(CHINA_TIME_ZONE); //獲得時區
        XSTREAM.registerConverter(
new DateConverter(zone), XStream.PRIORITY_NORMAL); XSTREAM.autodetectAnnotations(true); //開啟序列化的註解形式 XSTREAM.setMode(XStream.NO_REFERENCES);//取消引用,如果沒有這一步,會出現xml引用格式reference }

3. XStream的方法

  3.1 報文轉對象

public static Object fromXML(String xml) {
        Object target = null;
        XStream xstream = XSTREAM;
        xstream.processAnnotations(AllCase.class);//開啟此類的解析,否則無法解析
        try {
            target = xstream.fromXML(xml);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return target;
    }

  3.2 對象轉報文

public static String toXML(Object obj) {
        XStream xstream = XSTREAM;
        String xml= xstream.toXML(obj);
        return xml;
    }

  3.3 文件流轉對象

public static Object fromXML(InputStream in) {
        Object target = null;
        XStream xstream = XSTREAM;
        xstream.processAnnotations(AllCase.class);
        try {
            target =  xstream.fromXML(in);
            System.out.println("輸入成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return target;
    }

  3.4對象轉文件流

  

 public static void toXML(Object obj, OutputStream out) {
        XStream xstream = XSTREAM;
        xstream.toXML(obj,out);
        System.out.println("輸出成功");
    }

PS:XStream將java對象與xml之間序列化與反序列化,XStream自己封裝了序列化方法,java類不用實現Serializable接口

XStream--java對象與xml形式文件相互轉換