Properties extends Hashtable 。
也就是说,Properties 类也是以“键值对”(key - value) 形式存储。一般都写成 xxx.properties 文件,但是该类还有 loadFromXML 和 storeToXML 的两个方法,那么也就是说 这种形式可以存储成 XML 文件,那么 XML 文件里的格式有该怎么写呢?API 里的说明是:
loadFromXML(InputStream)
和storeToXML(OutputStream, String, String)
方法按简单的 XML 格式加载和存储属性。默认使用 UTF-8 字符编码,但如果需要,可以指定某种特定的编码。XML 属性文档具有以下 DOCTYPE 声明:<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">注意,导入或导出属性时不 访问系统 URI (http://java.sun.com/dtd/properties.dtd);该系统 URI 仅作为一个唯一标识 DTD 的字符串:<?xml version="1.0" encoding="UTF-8"?> <!-- DTD for properties --> <!ELEMENT properties ( comment?, entry* ) > <!ATTLIST properties version CDATA #FIXED "1.0"> <!ELEMENT comment (#PCDATA) > <!ELEMENT entry (#PCDATA) > <!ATTLIST entry key CDATA #REQUIRED>
但这样子的格式很不容易看明白到底是什么。下面做个测试看看这个格式是什么样子的。
1、创建一个文件,名为 a.porperties文件内容的格式如下
name=aaa password=bbb
读取该文件信息代码,如下
Properties pps = new Properties(); try { pps.load(new FileInputStream("a.properties")); Enumeration names = pps.propertyNames(); while (names.hasMoreElements()) { String strKey = (String) names.nextElement(); String strValue = pps.getProperty(strKey); System.out.println(strKey + "=" + strValue); } } catch (Exception e) { e.printStackTrace(); }
将该properties文件转为XML文件代码,如下
pps.storeToXML(new FileOutputStream("bbb.xml"), "agreal", "GB2312");
生成的XML文件如下
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>agreal</comment>
<entry key="password">bbb</entry>
<entry key="name">aaa</entry>
</properties>
再试试读取该文件内容,代码如下
Properties pps = new Properties(); try { pps.loadFromXML(new FileInputStream("bbb.xml")); Enumeration names = pps.propertyNames(); while (names.hasMoreElements()) { String strKey = (String) names.nextElement(); String strValue = pps.getProperty(strKey); System.out.println(strKey + "=" + strValue); } } catch (Exception e) { e.printStackTrace(); }
事情就是这样发生的。
从生成的 XML 文件来看,便可知道 API 给的格式是个怎样的了。