Write & Read xml as java class

来源:互联网 发布:数据库开发和软件开发 编辑:程序博客网 时间:2024/06/05 23:14

我们经常会用到各种配置文件,首选的格式是xml,那么我们如何方便的把我们的配置对象写成xml并且能够以对象的形式读取呢?这里我找到的一个用XSteam实现的xml读写类,非常简单实用,


package com.gxy.weixin.util;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.xml.DomDriver;/** *//** * 用于将任意对象持久化到XML文件及其逆过程的持久化类(dom4j,xstream实现) *  * @author: sitinspring(junglesong@gmail.com) * @date: 2008-1-8 */public class XmlWriter<T> {// XML文件名private final String xmlFile;// XML 文档对象private Document document;// 根节点private Element root;// 根节点名称private final String rootText = "root";/** *//** * 单参数构造函数,指定存储的文件名 *  * @param xmlFile */public XmlWriter(String xmlFile) {this.xmlFile = xmlFile;File file = new File(xmlFile);if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}init();}public void add(T type) {// 将对象转化为XML文字XStream xStream = new XStream();String xml = xStream.toXML(type);// xml = tryXML(xml);try {// 将转化后的文字变成节点Document docTmp = DocumentHelper.parseText(xml);Element typeElm = docTmp.getRootElement();// 添加这个节点root.add(typeElm);// 保存文件saveDocumentToFile();} catch (Exception ex) {ex.printStackTrace();}}public void addList(List<T> list) {// 将对象转化为XML文字XStream xStream = new XStream();for (T t : list) {String xml = xStream.toXML(t);// xml = tryXML(xml);try {// 将转化后的文字变成节点Document docTmp = DocumentHelper.parseText(xml);Element typeElm = docTmp.getRootElement();// 添加这个节点root.add(typeElm);} catch (Exception ex) {ex.printStackTrace();}}// 保存文件saveDocumentToFile();}/** *//** * 从XML文件中,删除一个对象對應的節點 *  * @param type */public void del(T type) {// 将对象转化为XML文字XStream xStream = new XStream();String xml = xStream.toXML(type);try {List nodes = root.elements();for (Iterator it = nodes.iterator(); it.hasNext();) {Element element = (Element) it.next();// 查找,节点全文相同必定元素相同if (element.asXML().equals(xml)) {// 删除原有节点root.remove(element);// 保存文件saveDocumentToFile();return;}}} catch (Exception ex) {ex.printStackTrace();}}public void deleteAll() {// 将对象转化为XML文字XStream xs = new XStream(new DomDriver());try {List nodes = root.elements();for (Iterator it = nodes.iterator(); it.hasNext();) {Element element = (Element) it.next();root.remove(element);// 保存文件saveDocumentToFile();}} catch (Exception ex) {ex.printStackTrace();}}/** *//** * 从XML中取得所有对象 *  * @return */public List<T> findAll() {List<T> retval = new ArrayList<T>();try {List nodes = root.elements();for (Iterator it = nodes.iterator(); it.hasNext();) {// 取得每个节点Element companyElm = (Element) it.next();// 节点转化为对象XStream xStream = new XStream(new DomDriver());T t = (T) xStream.fromXML(companyElm.asXML());retval.add(t);}} catch (Exception ex) {ex.printStackTrace();}return retval;}// 初始化文档对象及根节点private void init() {File file = new File(xmlFile);try {// 判断文件的存在以增强程序的健壮性if (file.exists()) {// 文件存在,直接从文件读取文档对象SAXReader reader = new SAXReader();document = reader.read(file);root = document.getRootElement();} else {// 文件不存在,创建文档对象document = DocumentHelper.createDocument();root = document.addElement(rootText);// 创建根节点}} catch (Exception ex) {ex.printStackTrace();}}/** *//** * 将Document写回文件 *  */private void saveDocumentToFile() {try {File f = new File(xmlFile);if (f.exists()) {f.delete();} else {f.createNewFile();}try {FileOutputStream fs = new FileOutputStream(f);fs.write(new byte[0]);fs.close();} catch (Exception e) {// TODO: handle exception}OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8"); // 指定XML编码XMLWriter writer = new XMLWriter(new FileWriter(f), format);writer.write(document);writer.close();} catch (Exception ex) {ex.printStackTrace();}}}

原文地址:

http://xoknight.net/?cat=58

0 0
原创粉丝点击