java.util.Properties的應用:setProperty, getProperty, storeToXML, loadFromXML
在我們撰寫java的過程中常需要設定一些外部的參數
譬如說連線的IP位址或都某些路徑的設定
這些參數當然可以直接設定在 .java 的程式碼中
只是這樣每次更改都必須重新 compile 非常不便
所以這篇要介紹的是把 (key, value) 設定在檔案中的方法
只要透過 java.util.Properties 就可以輕鬆達到我們的目的
之後更改參數不用在程式碼中尋找,全都設定在一份檔案中即可
先說明一下下面的程式碼
首先我們還不知道 java.util.Properties 所能讀取的檔案格式
所以一開始我們先設定幾組參數後利用內建的功能產生 .xml 和 .properties
詳細的檔案格式內容我有列出來
知道格式之後我們以後就可以寫好參數在檔案中
然後再使用 function 把參數取出來,這些也有詳細的說明
以下是程式 Demo:
所以建議使用 storeToXML
產生的 properties.xml內容:
譬如說連線的IP位址或都某些路徑的設定
這些參數當然可以直接設定在 .java 的程式碼中
只是這樣每次更改都必須重新 compile 非常不便
所以這篇要介紹的是把 (key, value) 設定在檔案中的方法
只要透過 java.util.Properties 就可以輕鬆達到我們的目的
之後更改參數不用在程式碼中尋找,全都設定在一份檔案中即可
先說明一下下面的程式碼
首先我們還不知道 java.util.Properties 所能讀取的檔案格式
所以一開始我們先設定幾組參數後利用內建的功能產生 .xml 和 .properties
詳細的檔案格式內容我有列出來
知道格式之後我們以後就可以寫好參數在檔案中
然後再使用 function 把參數取出來,這些也有詳細的說明
以下是程式 Demo:
輸出結果:
- import java.io.*;
- import java.util.Properties;
- public class PropertiesDemo {
- private static Properties props;
- public static void main(String[] args) {
- props = new Properties();
- // 用props.setProperty("key", "value")設定(key, value)配對
- props.setProperty("key1", "value1");
- props.setProperty("key2", "中文測試");
- // 用 props.list(System.out)在console 印出props中所有的(key, value)配對
- // -- listing properties --
- // key2=中文測試
- // key1=value1
- System.out.println("在console 印出props中所有的(key, value)配對");
- props.list(System.out);
- System.out.println();
- // 設定重覆的(key, value)配對會覆蓋掉
- // -- listing properties --
- // key2=中文測試
- // key1=更改value1
- System.out.println("印出更改後所有的(key, value)配對");
- props.setProperty("key1", "更改value1");
- props.list(System.out);
- System.out.println();
- try {
- // 輸出props中所有的(key, value)配對到xml(storeToXML)及txt(store)
- // 輸出後Stream不會自動關閉必須手動關閉,否則有可能出錯(不是在()中使用new時)
- // storeToXML(OutputStream os, Stirng comment, String encode)
- // storeToXML(OutputStream os, Stirng comment) encode預設使用 UTF-8
- props.storeToXML(new FileOutputStream("properties.xml"), "storeToXML");
- props.store(new FileOutputStream("properties.properties"), "store");
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- props.clear();
- try {
- // props.getProperty(key)讀出(key, value)配對
- // props.getProperty(String key, String defaultWhenNotFound)
- // props.getProperty(String key) throws exception when not found
- System.out.println("props.getProperty(key)讀出(key, value)配對");
- props.load(new FileInputStream("properties.properties"));
- System.out.println(props.getProperty("key", "test")); // default value test
- System.out.println(props.getProperty("key1"));
- props.clear();
- System.out.println();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- try {
- // 印出從 properties.xml 讀出的所有(key, value)配對
- System.out.println("印出properties.xml讀出的所有(key, value)配對");
- props.loadFromXML(new FileInputStream("properties.xml"));
- props.setProperty("key3", "new value");
- props.list(System.out);
- // 將新配對寫回 properties.xml,串流沒出錯
- props.storeToXML(new FileOutputStream("properties.xml"), "storeToXML");
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
產生的 properties.properties內容:
- 在console 印出props中所有的(key, value)配對
- -- listing properties --
- key2=中文測試
- key1=value1
- 印出更改後所有的(key, value)配對
- -- listing properties --
- key2=中文測試
- key1=更改value1
- props.getProperty(key)讀出(key, value)配對
- test
- 更改value1
- 印出properties.xml讀出的所有(key, value)配對
- -- listing properties --
- key3=new value
- key2=中文測試
- key1=更改value1
#store使用 store 所產生的文件並不直接支援中文
#Fri Dec 26 15:23:38 CST 2008
key2=\u4E2D\u6587\u6E2C\u8A66
key1=\u66F4\u6539value1
所以建議使用 storeToXML
產生的 properties.xml內容:
<?xml version="1.0" encoding="UTF-8"?>關鍵字:Properties, setProperty, getProperty, storeToXML, loadFromXML, 參數
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>storeToXML</comment>
<entry key="key3">new value</entry>
<entry key="key2">中文測試</entry>
<entry key="key1">更改value1</entry>
</properties>
留言
張貼留言