可以通過Commons Configuration訪問儲存於屬性檔案和XML文檔中的配置資訊, 依賴的包還有Commons Language, Commons Collections和Commons Logging.
1. 通過屬性檔案配置應用程式
屬性檔案作為設定檔, 讀取簡單, 但配置內容不靈活.
例如有設定檔config.properties如下:
no=237
names=kiyho,sinkiang
correct=false
可以用以下代碼讀取:
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
public class PropertiesConfigDemo {
public static void main(String[] args) {
try {
Configuration config = new PropertiesConfiguration(
"config.properties");
System.out.println("score: " + config.getFloat("score"));
System.out.println("names: " + config.getList("names"));
System.out.println("correct: " + config.getBoolean("correct"));
} catch (ConfigurationException e) {
e.printStackTrace();
}
}
}
感覺挺不爽, 用個configuration, 還要依賴其他3個commons包.
另外可以通過util包的Properties類實現配置讀取, 只是讀取到的都是String類型, 需要自己轉換.
import java.io.IOException;
import java.util.Properties;
public class PropertiesDemo {
public static void main(String[] args) {
try {
Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("config.properties"));
System.out.println("score: " + properties.getProperty("score"));
System.out.println("names: " + properties.getProperty("names"));
System.out.println("correct: " + properties.getProperty("correct"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 通過XML配置應用程式
假設有如下xml設定檔config.xml:
<?xml version="1.0" encoding="utf-8" ?>
<config>
<name>kiyho</name>
<name>sinkiang</name>
<info>
<age>100</age>
</info>
</conifig>
可以用以下代碼訪問:
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
public class XmlConfigDemo {
public static void main(String[] args) {
try {
XMLConfiguration config = new XMLConfiguration("config.xml");
System.out.println(config.getList("name"));
System.out.println(config.getInt("info.age"));
} catch (ConfigurationException e) {
e.printStackTrace();
}
}
}
XML設定檔讀取除了用Configuation外, 還可以用JDOM讀取:
import java.io.IOException;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class JdomXmlConfigDemo {
public static void main(String[] args) {
ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
try {
Document document = new SAXBuilder().build(classLoader
.getResourceAsStream("config.xml"));
List<Element> names = document.getRootElement().getChildren("name");
String age = document.getRootElement().getChild("info").getChild(
"age").getTextTrim();
for (Element name : names)
System.out.println("name: " + name.getTextTrim());
System.out.println("age: " + age);
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
不依賴任何Commons包, 只要到jdom包, 不過讀取到的都是String, 需要自己轉換.
3. 複合配置
多個設定檔, 假設有3個設定檔: global.properties, local.properties, user.properties, 其中user優先於local, local優先於global. 那麼用以下這3個設定檔和1個引用設定檔可實現複合配置.
cofigs.xml內容如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<properties fileName="user.properties" />
<properties fileName="local.properties" />
<properties fileName="global.properties" />
</configuration>
global.properties內容如下:
name=Default User
age=0
speed=10
local.properties內容如下:
name=kiyho
age=20
user.properties內容如下:
age=100
程式讀取如下:
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.ConfigurationFactory;
public class ConfigsDemo {
public static void main(String[] args) {
ConfigurationFactory factory = new ConfigurationFactory();
factory.setConfigurationFileName("configs.xml");
try {
Configuration config = factory.getConfiguration();
System.out.println("name: " + config.getString("name"));
System.out.println("age: " + config.getInt("age"));
System.out.println("speed: " + config.getFloat("speed"));
} catch (ConfigurationException e) {
e.printStackTrace();
}
}
}
另外, ConfigurationFactory依賴的包有Commons Digester和Commons beanutils
參考資料:http://www.52z.com/info/html/28911.html