這是一個讀取配置文件的工具包。
下載地址 : http://commons.apache.org/configuration/
A.讀取XML配置文件:
<config>
<ip>10.10.1.1</ip>
<account>jini</account>
<password>jakarta99</password>
<roles>
<role>admin</role>
<role>manager</role>
<role>user</role>
</roles>
</config>
測試代碼:
package demo;
import java.util.List;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
public class XMLConfigurationDemo ...{
public static void main(String[] args) throws ConfigurationException ...{
Configuration config = new XMLConfiguration(XMLConfigurationDemo.class
.getResource("/demo/system-config.xml"));
String ip = config.getString("ip");
String account = config.getString("account");
String password = config.getString("password");
List<?> roles = config.getList("roles.role");
System.out.println("IP: " + ip);
System.out.println("Account: " + account);
System.out.println("Password: " + password);
System.out.println("★★★★★ Roles Begin ★★★★★");
for (int i = 0; i < roles.size(); i++) ...{
System.out.println("Role: " + roles.get(i));
}
System.out.println("★★★★★ Roles End ★★★★★");
}
}
B.讀取Properties配置文件:
ip=10.10.1.1
account=jini
password=jakarta99
role1=admin
role2=manager
role3=user
colors.pie = #FF0000, #00FF00, #0000FF
測試代碼:
package demo;
import java.util.List;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
public class PropertiesConfigurationDemo ...{
public static void main(String[] args) throws ConfigurationException ...{
Configuration config = new PropertiesConfiguration(
PropertiesConfigurationDemo.class
.getResource("/demo/system-config.properties"));
String ip = config.getString("ip");
String account = config.getString("account");
String password = config.getString("password");
String role1 = config.getString("role1");
String role2 = config.getString("role2");
String role3 = config.getString("role3");
System.out.println("IP: " + ip);
System.out.println("Account: " + account);
System.out.println("Password: " + password);
System.out.println("★★★★★ Roles Begin ★★★★★");
System.out.println("Role1: " + role1);
System.out.println("Role2: " + role2);
System.out.println("Role3: " + role3);
System.out.println("★★★★★ Roles End ★★★★★");
String[] colors = config.getStringArray("colors.pie");
System.out.println("★★★★★ Use StringArray Begin ★★★★★");
for (int i = 0; i < colors.length; i++) ...{
System.out.println(colors[i]);
}
System.out.println("★★★★★ Use StringArray End ★★★★★");
List<?> colorList = config.getList("colors.pie");
System.out.println("★★★★★ Use List Begin ★★★★★");
for (int i = 0; i < colorList.size(); i++) ...{
System.out.println(colorList.get(i));
}
System.out.println("★★★★★ Use List End ★★★★★");
}
}
C.常見的配置資源
# PropertiesConfiguration 從一個 property 文件中加載配置 .
# XMLConfiguration 從 XML 文件中加載配置信息 .
# PropertyListConfiguration 從一個 .plist 文件中加載配置信息 . XMLPropertyListConfiguration 也可以讀取 XML 被 Mac OSX 使用變量 .
# JNDIConfiguration 利用 jndi 樹的一個鍵值,可以返回一個值,這個值來作為配置信息
# BaseConfiguration 訪問內存中的一個配置對象 .
# HierarchicalConfiguration 一個在內存中的配置對象,這個對象可以處理復雜的數據結構 .
# SystemConfiguration 一個利用系統屬性的配置信息
# ConfigurationConverter 把 java.util.Properties 或者 org.apache.collections.commons.ExtendedProperties 轉化為一個 Configuration 對象
D.混合使用多種資源
經常你希望提供一套基本的配置信息,而且允許用戶很容易的根據他們的特有的環境覆蓋他們。
一種辦法就是載你的代碼中隊默認值進行硬編碼,並且提供一個配置文件來覆蓋他們。 這是做法沒有一點彈性。替換做法是:運用 CompositeConfiguration 。
CompositeConfiguration config = new CompositeConfiguration();
config.addConfiguration(new SystemConfiguration());
config.addConfiguration(new PropertiesConfiguration("application.properties"));
或者通過ConfigurationFactory這個類 :
ConfigurationFactory factory = new ConfigurationFactory("config.xml");
Configuration config = factory.getConfiguration();
上面的config.xml是一個配置描述符。它定義了將要被裝載的配置對象(資源文件),例如:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<configuration>
<system/>
<properties fileName="application.properties"/>
</configuration>
上面的config.xml是一個配置描述符。它定義了將要被裝載的配置對象(資源文件),例如:
上面的意思是,我們加載了系統的配置,也加載了application.properties這個文件。
他的優先(precedence)順序是從前到後。所以在上面的例子中,如果一個屬性在系統配置中沒有,他將在文件配置中查找。這將允許你在文件配置中設定默認值,而且可以在系統配置中覆蓋他們。