1. 程式人生 > >【Java程式設計】寫入、讀取、遍歷配置檔案 Properties類

【Java程式設計】寫入、讀取、遍歷配置檔案 Properties類

在Java開發中通常我們會儲存配置引數資訊到屬性檔案,這樣的屬性檔案可以是擁有鍵值對的屬性檔案,也可以是XML檔案,關於XML檔案的操作,請參考博文【Java程式設計】DOM XML Parser 解析、遍歷、建立XML。在該篇博文中,我將展示如何向屬性檔案寫入鍵值對,如何讀取屬性檔案中的鍵值對,如何遍歷屬性檔案。

1、向屬性檔案中寫入鍵值對


特別注意:

Properties類呼叫setProperty方法將鍵值對儲存到記憶體中,此時可以通過getProperty方法讀取,propertyNames()方法進行遍歷,但是並沒有將鍵值對持久化到屬性檔案中,故需要呼叫store()方法持久化鍵值對到屬性檔案中

,這裡的store方法類似於Android SharedPreferences的commit()方法

  1. package com.andieguo.propertiesdemo;  
  2. import java.io.FileInputStream;  
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.OutputStream;  
  7. import java.util.Date;  
  8. import java.util.Enumeration;  
  9. import java.util.Properties;  
  10. import junit.framework.TestCase;  
  11. publicclass PropertiesTester extends TestCase {  
  12.     publicvoid writeProperties() {  
  13.         Properties properties = new Properties();  
  14.         OutputStream output = null;  
  15.         try {  
  16.             output = new FileOutputStream(
    "config.properties");  
  17.             properties.setProperty("url""jdbc:mysql://localhost:3306/");  
  18.             properties.setProperty("username""root");  
  19.             properties.setProperty("password""root");  
  20.             properties.setProperty("database""bbs");//儲存鍵值對到記憶體
  21. properties.store(output, "andieguo modify" + new Date().toString());// 儲存鍵值對到檔案中同時寫一寫註釋資訊到配置檔案中。見下檔案
  22.         } catch (IOException io) {  
  23.             io.printStackTrace();  
  24.         } finally {  
  25.             if (output != null) {  
  26.                 try {  
  27.                     output.close();  
  28.                 } catch (IOException e) {  
  29.                     e.printStackTrace();  
  30.                 }  
  31.             }  
  32.         }  
  33.     }  
  34. }  

執行單元測試後,屬性檔案內容如下:


2、讀取屬性檔案中的鍵值對


  1. publicclass PropertiesTester extends TestCase {  
  2.     publicvoid loadProperties() {  
  3.         Properties properties = new Properties();  
  4.         InputStream input = null;  
  5.         try {  
  6.             input = new FileInputStream("config.properties");//載入Java專案根路徑下的配置檔案
  7.             properties.load(input);// 載入屬性檔案
  8.             System.out.println("url:" + properties.getProperty("url"));  
  9.             System.out.println("username:" + properties.getProperty("username"));  
  10.             System.out.println("password:" + properties.getProperty("password"));  
  11.             System.out.println("database:" + properties.getProperty("database"));  
  12.         } catch (IOException io) {  
  13.         } finally {  
  14.             if (input != null) {  
  15.                 try {  
  16.                     input.close();  
  17.                 } catch (IOException e) {  
  18.                     e.printStackTrace();  
  19.                 }  
  20.             }  
  21.         }  
  22.     }  
  23. }  

執行單元測試方法,console輸出的output如下:


3、遍歷屬性檔案中的鍵值對

  1. package com.andieguo.propertiesdemo;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.util.Enumeration;  
  5. import java.util.Map.Entry;  
  6. import java.util.Properties;  
  7. import java.util.Set;  
  8. import junit.framework.TestCase;  
  9. publicclass PropertiesTester extends TestCase {  
  10.     publicvoid printAll() {  
  11.         Properties prop = new Properties();  
  12.         InputStream input = null;  
  13.         try {  
  14.             String filename = "config.properties";  
  15.             input = getClass().getClassLoader().getResourceAsStream(filename);  
  16.             if (input == null) {  
  17.                 System.out.println("Sorry, unable to find " + filename);  
  18.                 return;  
  19.             }  
  20.             prop.load(input);  
  21.             //方法一:
  22.             Set<Object> keys = prop.keySet();//返回屬性key的集合
  23.             for(Object key:keys){  
  24.                 System.out.println("key:"+key.toString()+",value:"+prop.get(key));  
  25.             }  
  26.             //方法二:
  27.             Set<Entry<Object, Object>> entrys = prop.entrySet();//返回的屬性鍵值對實體
  28.             for(Entry<Object, Object> entry:entrys){  
  29.                 System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());  
  30.             }  
  31.             //方法三:
  32.             Enumeration<?> e = prop.propertyNames();  
  33.             while (e.hasMoreElements()) {  
  34.                 String key = (String) e.nextElement();  
  35.                 String value = prop.getProperty(key);  
  36.                 System.out.println("Key:" + key + ",Value:" + value);  
  37.             }  
  38.         } catch (IOException ex) {  
  39.             ex.printStackTrace();  
  40.         } finally {  
  41.             if (input != null) {  
  42.                 try {  
  43.                     input.close();  
  44.                 } catch (IOException e) {  
  45.                     e.printStackTrace();  
  46.                 }  
  47.             }  
  48.         }  
  49.     }  
  50. }  

4、其他方法

public void list(PrintStream out)

將屬性列表輸出到指定的輸出流。此方法對除錯很有用。

public void storeToXML(OutputStream os,Stringcomment) throws IOException

發出一個表示此表中包含的所有屬性的 XML 文件。

5、參考

6、你可能感興趣的文章