Introduction
在windows aplication中我們常常看到許多的xxx.ini設定檔,絕大多數的設定檔內容都下面範例所示
1 2 3 4 5 6 7 8 9 10 11 12 |
[db] user = userid; pass = On [Section1] var = 11 name = myName filepath = c:\ [Section2] var = 22 lan = 9 |
如此的設定檔表示方法比較直覺化,然而Apache已經提供了相當完善的Java API工具,可由下面網址下載。本文將介紹與實作如何存取設定檔,達到組態外部化的目的。下載網址如下:
http://commons.apache.org/configuration/
Apache INIConfiguration設定檔介紹
在上述的範例設定檔中,我們可以看到由三個Section所組成,如次的分類功能可以讓我們有效在同一個設定檔中切割系統的組態變數,以下將說明如何使用Java讀取與設定組態。
Implement
- 新增一個config.ini設定檔
1 2 3 4 5 6 7 8 9 10 11 12 |
[Section1] var = 11 name = myName filepath = c:\ [Section2] var = 22 lan = 9 [db] user = userid pass = On |
- 新增TestINI.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import java.io.File; import java.util.Iterator; import java.util.Set; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.INIConfiguration; public class TestINI { static public void main(String args[]) { try { //開啟設定檔 INIConfiguration ini = new INIConfiguration(new File("config.ini")); System.out.println(ini.getProperty("Section1.var")); System.out.println(ini.getProperty("Section2.var")); System.out.println(ini.getProperty("name")); //列出所有Sections Set list = ini.getSections(); Iterator iterator = list.iterator(); while (iterator.hasNext()) { System.out.println("Section: "+iterator.next()); } //存入一個新的值 ini.setProperty("db.testvar", "test"); ini.save(); } catch (ConfigurationException e) { e.printStackTrace(); } } } |
- 執行輸出的結果為
1 2 3 4 5 6 |
11 22 null Section: Section1 Section: Section2 Section: db |
使用錯誤的名稱將傳回null
- config.ini設定檔自動修改如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Section1] var = 11 name = myName filepath = c:\ [Section2] var = 22 lan = 9 [db] user = userid pass = On testvar = test <code> |
Reference