經典 key=value 格式雖簡單,但缺乏結構化標記、編碼聲明與註釋標準化,且需手工解析特殊字符轉義。Java 5.0 為 java.util.Properties 新增 loadFromXML(InputStream) 與 storeToXML(OutputStream, String comment),採用標準 XML DTD,解決上述痛點。
<!ELEMENT properties ( comment?, entry* )>
<!ATTLIST properties version CDATA #FIXED "1.0">
<!ELEMENT comment (#PCDATA)>
<!ELEMENT entry (#PCDATA)>
<!ATTLIST entry key CDATA #REQUIRED>
對應文件範例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "https://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Hi</comment>
<entry key="foo">bar</entry>
<entry key="fu">baz</entry>
</properties>
載入:
Properties prop = new Properties();
prop.loadFromXML(new FileInputStream("config.xml"));
存儲:
prop.storeToXML(new FileOutputStream("config.xml"), "應用配置註釋");
輸出自動包含 DOCTYPE 聲明、UTF-8 編碼與註釋,鍵值順序因底層 Hashtable 特性不保證,但語義等價。
兩種格式可共存,Properties 實例載入後內部表示完全一致,應用代碼無感知差異。