Properties的基本用法

Properties 基本知識
若是不熟悉  java.util.Properties 類,那麼如今告訴您它是用來在一個文件中存儲鍵-值對的,其中鍵和值是用等號分隔的,如清單 1 所示。 
將清單 1 裝載到  Properties 對象中後,您就能夠找到兩個鍵( foo 和 fu )和兩個值( foo 的 bar 和 fu 的 baz )了。
清單 2 顯示瞭如何裝載屬性文件並列出它當前的一組鍵和值。只需傳遞這個文件的  InputStream 給 load() 方法,就會將每個鍵-值對添加到 Properties 實例中。而後用 list() 列出全部屬性或者用 getProperty() 獲取單獨的屬性。 
清單 2. 裝載屬性
import java.util.*;
import java.io.*;public class LoadSample 
{  
public static void main(String args[]) throws Exception { 
   Properties prop = new Properties();   
 FileInputStream fis =new FileInputStream("sample.properties");    
prop.load(fis);    
prop.list(System.out);    
System.out.println("\nThe foo property: " +prop.getProperty("foo"));  }
}
注意  list() 方法的輸出中鍵-值對的順序與它們在輸入文件中的順序不同。 Properties 類在一個散列表(hashtable,事實上是一個 Hashtable 子類)中儲存一組鍵-值對,因此不能保證順序。
 
 
J2SE 1.5 之前的版本要求直接使用 XML 解析器來裝載配置文件並存儲設置。雖然這並不是是一件困難的事情,而且解析器是平臺的標準部分,可是額外的工做老是有點讓人煩。最近更新的  java.util.Properties 類如今提供了一種爲程序裝載和存儲設置的更容易的方法: loadFromXML(InputStream is) 和 storeToXML(OutputStream os, String comment) 方法。 
清單 4. 屬性 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>
若是不想細讀 XML DTD,那麼能夠告訴您它其實就是說在外圍  <properties> 標籤中包裝的是一個 <comment> 標籤,後面是任意數量的 <entry> 標籤。對每個 <entry> 標籤,有一個鍵屬性,輸入的內容就是它的值。清單 5 顯示了  清單 1中的屬性文件的 XML 版本是什麼樣子的。 
清單 5. XML 版本的屬性文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Hi</comment>
<entry key="foo">bar</entry>
<entry key="fu">baz</entry>
</properties>
若是清單 6 所示,讀取 XML 版本的  Properties 文件與讀取老格式的文件沒什麼不一樣。 
清單 6. 讀取 XML Properties 文件
import java.util.*;
import java.io.*;
public class LoadSampleXML {  
public static void main(String args[]) throws Exception {    
Properties prop = new Properties();    
FileInputStream fis =new FileInputStream("sampleprops.xml");    
prop.loadFromXML(fis);    
prop.list(System.out);    
System.out.println("\nThe foo property: " +prop.getProperty("foo"));  }
}
保存 XML 屬性
新的  Properties 還有一個功能是將屬性存儲到 XML 格式的文件中。雖然 store() 方法仍然會建立一個相似  清單 1 所示的文件,可是如今能夠用新的  storeToXML() 方法建立如  清單 5 所示的文件。只要傳遞一個  OutputStream 和一個用於註釋的 String 就能夠了。清單 7 展現了新的 storeToXML() 方法。 
清單 7. 將 Properties 存儲爲 XML 文件
import java.util.*;
import java.io.*;
public class StoreXML {  
public static void main(String args[]) throws Exception {   
 Properties prop = new Properties();    
 prop.setProperty("one-two", "buckle my shoe");   
 prop.setProperty("three-four", "shut the door");    
prop.setProperty("five-six", "pick up sticks");    
prop.setProperty("seven-eight", "lay them straight");    
prop.setProperty("nine-ten", "a big, fat hen");    
FileOutputStream fos =new FileOutputStream("rhyme.xml");    
prop.storeToXML(fos, "Rhyme");    
fos.close();  }
}
保存 XML 屬性
新的  Properties 還有一個功能是將屬性存儲到 XML 格式的文件中。雖然 store() 方法仍然會建立一個相似  清單 1 所示的文件,可是如今能夠用新的  storeToXML() 方法建立如  清單 5 所示的文件。只要傳遞一個  OutputStream 和一個用於註釋的 String 就能夠了。清單 7 展現了新的 storeToXML() 方法。 
清單 7. 將 Properties 存儲爲 XML 文件
import java.util.*;
import java.io.*;
public class StoreXML {  
public static void main(String args[]) throws Exception {    
Properties prop = new Properties();    
prop.setProperty("one-two", "buckle my shoe");    
prop.setProperty("three-four", "shut the door");    
prop.setProperty("five-six", "pick up sticks");   
 prop.setProperty("seven-eight", "lay them straight");    
prop.setProperty("nine-ten", "a big, fat hen");    
FileOutputStream fos =new FileOutputStream("rhyme.xml");    
prop.storeToXML(fos, "Rhyme");    
fos.close();  }
}
運行清單 7 中的程序產生的輸出如清單 8 所示。
清單 8. 存儲的 XML 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Rhyme</comment>
<entry key="seven-eight">lay them straight</entry>
<entry key="five-six">pick up sticks</entry>
<entry key="nine-ten">a big, fat hen</entry>
<entry key="three-four">shut the door</entry>
<entry key="one-two">buckle my shoe</entry>
</properties>
結束語
使用 XML 文件仍是使用老式的 a=b 類型的文件徹底取決於您本身。老式文件從內存的角度看確定是輕量級的。不過,因爲 XML 的廣泛使用,人們會指望 XML 格式流行起來,由於它已經被普遍使用了,只不過沒有用到  Properties 對象。
相關文章
相關標籤/搜索