-- 作者:杨一
-- 发布时间:11/22/2005 3:07:00 PM
-- XML-properties in jdk1.4 using dom4j
作为DOM4J应用的例子 用XML实现的properties,欢迎大家指正 /** * @author yangyi * @version 1.0 */ import java.io.FileWriter; import java.io.IOException; import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class XMLProperty extends Properties { Document document; Node node; /** * override 超类的方法,根据url载入Document * * @param url */ public void load(URL url) { SAXReader reader = new SAXReader(); try { document = reader.read(url); } catch (DocumentException e) { e.printStackTrace(); } } /** * overload the super method 设置一些信息到xml文件中,如果这些信息以前不存在,则在xml中新增记 录, * 如果已经存在,则根据传入的参数对其进行更新 * * @param name * 设置的文件信息 * @param value * 设置的value值 * @param add * 设置的附加信息 */ public void setProperty(String name, String value, String add) { // 以特定的格式展现时间 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss"); String fd = sdf.format(date); Element table = null; // 如果不存在这样一个节点 if (node == null) { Element xml = document.getRootElement(); table = xml.addElement("table"); table.addText(value); } // 如果已经存在这个节点,但是类型不相同 else if (node instanceof Element) { table = (Element) node; table.setText(value); } // 如果类型转换出现错误 else System.out.println("程序类型转换出错!"); table.addAttribute("name", name).addAttribute("time", fd) .addAttribute("add", add); try { OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileWriter("properties.xml"), format); writer.write(document); writer.close(); } catch (IOException e) { e.printStackTrace(); } } /** * override 超类的方法。如果给据参数找不到相关的信息,则返回null,否则返回value * * @param str表名(xml文件名) * @return 要返回的value,如果没有找到就返回null */ public String getProperty(String fileName) { node = document.selectSingleNode("//table[@name='" + str+ "']"); if (node == null) { return null; } else { return node.getText(); } } }
|