欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java使用JDOM 实现的 XMLProperties 类,jdomxmlproperties,XMLPropertie

来源: javaer 分享于  点击 37644 次 点评:221

java使用JDOM 实现的 XMLProperties 类,jdomxmlproperties,XMLPropertie


XMLProperties.java

package javaxml3;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.InputStream;import java.io.InputStreamReader;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.Reader;import java.io.Writer;import java.util.Enumeration;import java.util.Iterator;import java.util.List;import java.util.Properties;import org.jdom.Attribute;import org.jdom.Comment;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;import org.jdom.output.Format;import org.jdom.output.XMLOutputter;public class XMLProperties extends Properties {    public void load(Reader reader)     throws IOException {    try {         // Load XML into JDOM Document        SAXBuilder builder = new SAXBuilder();        Document doc = builder.build(reader);        // Turn into properties objects        loadFromElements(doc.getRootElement().getChildren(),             new StringBuffer(""));    } catch (JDOMException e) {        throw new IOException(e.getMessage());    }        }private void loadFromElements(List elements, StringBuffer baseName) {    // Iterate through each element    for (Iterator i = elements.iterator(); i.hasNext(); ) {        Element current = (Element)i.next();        String name = current.getName();        String text = current.getTextNormalize();        // Don't add "." if no baseName        if (baseName.length() > 0) {            baseName.append(".");        }                    baseName.append(name);        // See if we have an element value        if ((text == null) || (text.equals(""))) {            // If no text, recurse on children            loadFromElements(current.getChildren(),                             baseName);        } else {                            // If text, this is a property            setProperty(baseName.toString(),                         text);        }                    // On unwind from recursion, remove last name        if (baseName.length() == name.length()) {            baseName.setLength(0);        } else {                            baseName.setLength(baseName.length() -                 (name.length() + 1));        }                }        }    public void load(InputStream inputStream) throws IOException {        load(new InputStreamReader(inputStream));    }    public void load(File xmlDocument) throws IOException {        load(new FileReader(xmlDocument));    }    public void save(OutputStream out, String header) {        try {            store(out, header);        } catch (IOException ignored) {            // Deprecated version doesn't pass errors        }    }    public void store(Writer writer, String header) throws IOException {        // Create a new JDOM Document with a root element "properties"        Document doc = new Document();        Element root = new Element("properties");        doc.setRootElement(root);        // Add in header information        Comment comment = new Comment(header);        doc.getContent().add(0, comment);        // Get the property names        Enumeration propertyNames = propertyNames();        while (propertyNames.hasMoreElements()) {            String propertyName = (String) propertyNames.nextElement();            String propertyValue = getProperty(propertyName);            createXMLRepresentation(root, propertyName, propertyValue);        }        // Output document to supplied filename        XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());        outputter.output(doc, writer);    }    private void createXMLRepresentation(Element root, String propertyName,            String propertyValue) {        int split;        String name = propertyName;        Element current = root;        Element test = null;        while ((split = name.indexOf(".")) != -1) {            String subName = name.substring(0, split);            name = name.substring(split + 1);            // Check for existing element            if ((test = current.getChild(subName)) == null) {                Element subElement = new Element(subName);                current.addContent(subElement);                current = subElement;            } else {                current = test;            }        }        // When out of loop, what's left is the final element's name        Element last = new Element(name);        last.setText(propertyValue);        /** Uncomment this for Attribute usage */        /*         * last.setAttribute("value", propertyValue);         */        current.addContent(last);    }    public void store(OutputStream out, String header) throws IOException {        store(new OutputStreamWriter(out), header);    }    public void store(File xmlDocument, String header) throws IOException {        store(new FileWriter(xmlDocument), header);    }}
相关栏目:

用户点评