Java.Properties大全

讀取.properties配置文件在實際的開發中使用的很多,總結了一下,有以下幾種方法:
一、通過jdk提供的java.util.Properties類。
此類繼承自java.util.HashTable,即實現了Map接口,所以,可使用相應的方法來操作屬性文件,但不建議使用像put、putAll這兩個方法,因爲put方法不僅允許存入String類型的value,還可以存入Object類型的。因此java.util.Properties類提供了getProperty()和setProperty()方法來操作屬性文件,同時使用store或save(已過時)來保存屬性值(把屬性值寫入.properties配置文件)。在使用之前,還需要加載屬性文件,它提供了兩個方法:load和loadFromXML。
load有兩個方法的重載:load(InputStream inStream)、load(Reader reader),所以,可根據不同的方式來加載屬性文件。
可根據不同的方式來獲取InputStream,如:

1、通過當前類加載器的getResourceAsStream方法獲取


  1. InputStream inStream = TestProperties.class.getClassLoader().getResourceAsStream("test.properties");  


2、從文件獲取


  1. InputStream inStream = new FileInputStream(new File("filePath"));  


3、也是通過類加載器來獲取,和第一種一樣


  1. InputStream in = ClassLoader.getSystemResourceAsStream("filePath");  


4、在servlet中,還可以通過context來獲取InputStream

 

  1. InputStream in = context.getResourceAsStream("filePath");  


5、通過URL來獲取
[java] view plaincopy
  1. URL url = new URL("path");  
  2. InputStream inStream = url.openStream();  
  1. URL url = new URL("path");  
  2. InputStream inStream = url.openStream();  


讀取方法如下:


  1. Properties prop = new Properties();  
  2. prop.load(inStream);  
  3. String key = prop.getProperty("username");  
  4. //String key = (String) prop.get("username");  



二、通過java.util.ResourceBundle類來讀取,這種方式比使用Properties要方便一些。
1、通過ResourceBundle.getBundle()靜態方法來獲取(ResourceBundle是一個抽象類),這種方式來獲取properties屬性文件不需要加.properties後綴名,只需要文件名即可。

  1. ResourceBundle resource = ResourceBundle.getBundle("com/mmq/test");//test爲屬性文件名,放在包com.mmq下,如果是放在src下,直接用test即可  
  2. String key = resource.getString("username");  

2、從InputStream中讀取,獲取InputStream的方法和上面一樣,不再贅述。


  1. ResourceBundle resource = new PropertyResourceBundle(inStream);  


    注意:在使用中遇到的最大的問題可能是配置文件的路徑問題,如果配置文件入在當前類所在的包下,那麼需要使用包名限定,如:test.properties入在com.mmq包下,則要使用com/mmq/test.properties(通過Properties來獲取)或com/mmq/test(通過ResourceBundle來獲取);屬性文件在src根目錄下,則直接使用test.properties或test即可。



1.Properties類與Properties配置文件

  Properties類繼承自Hashtable類並且實現了Map接口,也是使用一種鍵值對的形式來保存屬性集。不過Properties有特殊的地方,就是它的鍵和值都是字符串類型。

2.Properties中的主要方法

(1)load(InputStream inStream)

   這個方法可以從.properties屬性文件對應的文件輸入流中,加載屬性列表到Properties類對象如下面的代碼:

Properties pro = new Properties();
FileInputStream in = new FileInputStream("a.properties");
pro.load(in);
in.close();

(2)store(OutputStream out, String comments)

   這個方法將Properties類對象的屬性列表保存到輸出流中如下面的代碼:

FileOutputStream oFile = new FileOutputStream(file, "a.properties");
pro.store(oFile, "Comment");
oFile.close();

  如果comments不爲空,保存後的屬性文件第一行會是#comments,表示註釋信息;如果爲空則沒有註釋信息。

  註釋信息後面是屬性文件的當前保存時間信息。

(3)getProperty/setProperty

   這兩個方法是分別是獲取和設置屬性信息。

3.代碼實例

 屬性文件a.properties如下:

name=root
pass=liu
key=value

讀取a.properties屬性列表,與生成屬性文件b.properties。代碼如下:

複製代碼
 1 import java.io.BufferedInputStream;
 2 import java.io.FileInputStream;
 3 import java.io.FileOutputStream;
 4 import java.io.InputStream; 
 5 import java.util.Iterator;
 6 import java.util.Properties; 
 7 
 8 public class PropertyTest {
 9     public static void main(String[] args) { 
10         Properties prop = new Properties();     
11         try{
12             //讀取屬性文件a.properties
13             InputStream in = new BufferedInputStream (new FileInputStream("a.properties"));
14             prop.load(in);     ///加載屬性列表
15             Iterator<String> it=prop.stringPropertyNames().iterator();
16             while(it.hasNext()){
17                 String key=it.next();
18                 System.out.println(key+":"+prop.getProperty(key));
19             }
20             in.close();
21             
22             ///保存屬性到b.properties文件
23             FileOutputStream oFile = new FileOutputStream("b.properties", true);//true表示追加打開
24             prop.setProperty("phone", "10086");
25             prop.store(oFile, "The New properties file");
26             oFile.close();
27         }
28         catch(Exception e){
29             System.out.println(e);
30         }
31     } 
32 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章