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
- Write & Read xml as java class
- Read and Write XML
- READ Write xml
- java - properties read write
- java read write text
- read and write binary xml
- java的write和read
- Read / Write Locks in Java
- Java-文件操作|read|write
- how to mount /system as read/write in android?
- Read read read, write write write!
- BasicExcel - A Class to Read and Write to Microsoft Excel
- Qt Write and Read XML File 读写XML文件
- read/write
- read/write
- Read && Write
- Java XML Read
- Read and Write XLS in Java - JXLS
- Windows五种IO模型性能分析
- Android 解析后台返回为Json数据的简单例子!!!
- MIT麻省理工的四轴飞行器
- 【Angular】双向数据绑定--作用域树
- MTK Android Driver :sensor
- Write & Read xml as java class
- Linux开机提示fsck.ext3:Unable to resolve ‘LABLE=XXXX’错误导致无法正常开机解决办法
- [ linux ] linux下配置oracle自启动!
- [Linux]Vim的NERDTree快捷键
- ICCV 2011 Papers List
- 【Qt】之 QTreeView和QFileSystemModel
- Android Activity和Intent机制学习笔记
- 切割NGUI图集
- 逃出你的肖申克(三):遇见20万年前的自己