方便好使的java.util.Properties類


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

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

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

#測試環境配置:平台路徑配置

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

dbPort = localhost

databaseName = myd

dbUserName = root

#打頭的是注釋行,Properties會忽略注釋。允許只有key沒有value。

例如這樣:

#測試環境配置:平台路徑配置

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

dbPort = 
databaseName

這種情況下,value會被set成null。

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

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

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

 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類這種特別奇葩的類,但是這些不常用的工具類還是很方便使用的,要能用起來,在用得到的時候還是很能提高效率的。比自己寫解析方便快捷多了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM