XStream--java對象與xml形式文件相互轉換
阿新 • • 發佈:2018-02-13
初始化 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形式文件相互轉換