方便好使的java.util.Properties類

今天偶然碰到這個類,發現jdk中這些平時不大用到的類還挺好玩兒的,用起來也特別實在方便,隨便寫點記錄下。java

java.util.Properties是對properties這類配置文件的映射。支持key-value類型和xml類型兩種。web

key-value類型的配置文件大略長這樣:app

複製代碼
#測試環境配置:平臺路徑配置

jstrd_home=D:/TMS2006/webapp/tms2006/WEB-INF/

dbPort = localhost

databaseName = myd

dbUserName = root
複製代碼

#打頭的是註釋行,Properties會忽略註釋。容許只有key沒有value。webapp

例如這樣:工具

複製代碼
#測試環境配置:平臺路徑配置

jstrd_home=D:/TMS2006/webapp/tms2006/WEB-INF/

dbPort = 
databaseName
複製代碼

這種狀況下,value會被set成null。測試

properties類實現了Map接口,因此很明顯,他是用map來存儲key-value數據,因此也註定存入數據是無序的,這個點須要注意。只能經過key的方式來get對應value。spa

針對key-value這種配置文件,是用load方法就能直接映射成map,很是簡單好用。這種配置文件也是咱們最重要碰到的配置文件,利用properties讀取這類文件到內存一行代碼就歐科,比本身解析強大多了,這點很贊。code

讀取配置文件的大略代碼以下:xml

複製代碼
 1 public class LoadSample {  
 2     public static void main(String args[]) throws Exception {  
 3       Properties prop = new Properties();  
 4       FileInputStream fis =   
 5         new FileInputStream("sample.properties");  
 6       prop.load(fis);  
 7       prop.list(System.out);  
 8       System.out.println("\nThe foo property: " +  
 9           prop.getProperty("foo"));  
10     }  
11 }  
複製代碼

第六行的load方法直接生產一個內存map,第九行就能get到對應的value了,簡單快捷。對象

這裏的第七行list方法是一個輸出方法,這邊是輸出到console,也能夠輸出到文件等,就能實現內存寫入配置文件了。

好比這樣:

複製代碼
 1 //經過list 方法將Properties寫入Properties文件
 2 import java.io.IOException;
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.PrintStream;
 6 import java.util.Properties;
 7 
 8 public class Test {
 9     public static void main(String[] args) {
10 
11         Properties p = new Properties();
12         p.setProperty("id","dean");
13         p.setProperty("password","123456");
14 
15         try{
16             PrintStream fW = new PrintStream(new File("e:\\test1.properties"));
17           p.list(fW );} catch (IOException e) {
18           e.printStackTrace();
19 
20         }
21     }
22 }        
複製代碼

這樣就能把內存中的properties對象寫入到文件中了。

 

另一種配置形式是xml形式的,這種配置相對上面一種就少見一點。

 

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>  
複製代碼

讀取xml配置跟讀取kv配置沒差異,就是把load換成xml對應的loadFromXML方法,代碼大略是這樣:

複製代碼
 1 public class LoadSampleXML {  
 2     public static void main(String args[]) throws Exception {  
 3       Properties prop = new Properties();  
 4       FileInputStream fis =  
 5         new FileInputStream("sampleprops.xml");  
 6       prop.loadFromXML(fis);  
 7       prop.list(System.out);  
 8       System.out.println("\nThe foo property: " +  
 9           prop.getProperty("foo"));  
10     }  
11 }  
複製代碼

把內存中的properties對象寫入到xml文件中也和上面差很少,就是把list方法改爲xml對應的storeToXML方法。

代碼大略是這樣:

複製代碼
 1 import java.io.IOException;
 2 import java.io.File;
 3 import java.io.FileInputStream;
 4 import java.io.PrintStream;
 5 import java.util.Properties;
 6 
 7 public class Test {
 8     public static void main(String[] args) {
 9         Properties p = new Properties();
10         p.setProperty("id","dean");
11         p.setProperty("password","123456");
12 
13         try{
14             PrintStream fW = new PrintStream(new File("e:\\test1.xml"));
15             p.storeToXML(fW,"test");
16         } catch (IOException e) {
17             e.printStackTrace();
18         }
19     }
20 }
21                 
複製代碼

 

總的來講,雖然jdk中存在date類這種特別奇葩的類,可是這些不經常使用的工具類仍是很方便使用的,要能用起來,在用獲得的時候仍是很能提升效率的。比本身寫解析方便快捷多了。

相關文章
相關標籤/搜索