Properties
类表示了一个持久的属性集。
Properties
可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。
因为 Properties
继承于 Hashtable
,所以可对 Properties
对象应用 put
和 putAll
方法。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String
的项。
相反,应该使用 setProperty
方法。如果在“不安全”的 Properties
对象(即包含非 String
的键或值)上调用 store
或 save
方法,则该调用将失败。类似地,如果在“不安全”的
Properties
对象(即包含非 String
的键)上调用 propertyNames
或 list
方法,则该调用将失败。
以下是Properties加载的文件,以键值对的形式存储。
a=java.util.Date
b=javax.swing.JFrame
public class PropertiesSample {
public static void main(String[] args) throws IOException {
Properties pro = new Properties();
FileInputStream fis = new FileInputStream("obj.txt");
//从输入流中读取属性列表(键和元素对)。
pro.load(fis);
//将属性列表输出到指定的输出流。此方法对调试很有用。
pro.list(System.out);
System.out.println(pro.getProperty("a"));
}
}
结果:
-- listing properties --
b=javax.swing.JFrame
a=java.util.Date
java.util.Date
Properties还可以读取xml文件,但是对于xml文件的格式有要求:
<?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>
其实就是<properties>中包含了一个<comment>标签,以及任意数据量的<entry>标签,每一个<entry>标签有一个键属性,输入的内容就是属性值。例如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>java</comment>
<entry key="title">Thinking in java</entry>
<entry key="price">49.9</entry>
</properties>
public class XmlSample {
public static void main(String[] args) throws IOException {
Properties pro = new Properties();
FileInputStream fis = new FileInputStream("books.xml");
pro.loadFromXML(fis);
pro.list(System.out);
}
}
结果为:
-- listing properties --
price=49.9
title=Thinking in java
Properties类一样可以创建xml数据。使用的是storeToXML()方法。
public class StoreXmlTest {
public static void main(String[] args) throws IOException {
Properties prop = new Properties();
prop.setProperty("title","Think in java");
prop.setProperty("price","49.9");
FileOutputStream fos = new FileOutputStream("test.xml");
prop.storeToXML(fos,"hello");
fos.close();
}
}
结果:(这是xml文件中的内容)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>hello</comment>
<entry key="price">49.9</entry>
<entry key="title">Think in java</entry>
</properties>