Write & Read xml as java class
2014-01-11 15:39
260 查看
我们经常会用到各种配置文件,首选的格式是xml,那么我们如何方便的把我们的配置对象写成xml并且能够以对象的形式读取呢?这里我找到的一个用XSteam实现的xml读写类,非常简单实用,
原文地址:
http://xoknight.net/?cat=58
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
相关文章推荐
- Units Problem: How to read text size as custom attr from xml and set it to TextView in java code
- Java中的读写锁Lock&ReadWriteLock
- JAVA中路径问题总结Class.getResourceAsStream() & ClassLoader的getR...
- 【JAVA学习】读取文件getClassLoader().getResourceAsStream("xxx")
- 相对路径获取JAVA配置文件Class.getResourceAsStream() & ClassLoader的getResourceAsStream()
- Units Problem: How to read text size as custom attr from xml and set it to TextView in java code
- ProbeException解决办法:There is no WRITEABLE property named 'id' in class 'java.lang.String'
- Java file read & write
- access denied ("java.util.PropertyPermission" "*" "read,write")
- Java Concurrency - ReadWriteLock & ReentrantReadWriteLock
- Thread.currentThread().getContextClassLoader().getResourceAsStream("myConfig.xml"));//在src下寻找myC
- Units Problem: How to read text size as custom attr from xml and set it to TextView in java code
- Java's Thread——Thread class and Runnables
- Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
- Java中关于先有鸡还是先有蛋的问题----Class&Object
- JAVA ReentrantReadWriteLock AND 缓存系统
- Java & XML Tutorial
- Java&Xml教程(一)简介
- java高并发程序设计总结五:jdk并发包其他同步控制工具类:ReadWriteLock/CountDownLatch/CyclicBarrier/LockSupport
- java 多线之用ReadWriteLock实现 一个简单缓存