Commons Configuration是一个java应用程序的配置管理工具。可以从properties或者xml文件中加载软件的配置信息,用来构建支撑软件运行的基础环境。在一些配置文件较多较的复杂的情况下,使用该配置工具比较可以简化配置文件的解析和管理。也提高了开发效率和软件的可维护性。
官方主页:[url]http://commons.apache.org/configuration/[/url]
1 如果要使用configuration这个包,首先要保证使用JDK1.2以上,还要引入如下jar包
- commons-beanutils
- commons-lang
- commons-logging
- commons-collections
- commons-digester
- commons-codec
- commons-jxpath
2 commons-configuration最新的版本是1.5,最主要的作用是读取资源文件,每一种文件格式都有一个对应的类,如下
- properties文件--PropertiesConfiguration类
- xml文件--XMLConfiguration
- .ini文件--INIConfiguration
- .plist文件--PropertyListConfiguration
- 还可以从JNDI中读取properties--JNDIConfiguration
- 当然还可以使用system的properties--SystemConfiguration
- 等等...
资源下载地址:http://archive.apache.org/dist/commons/
一、读取property文件demo
package cfgtest; import org.apache.commons.configuration.*;
/**
* Commons Configuration读取属性文件的例子
*
* @author leizhimin 2008-9-23 9:40:17
*/
public class Test1 {
public static void main(String[] args) throws ConfigurationException {
test1();
}
public static void test1() throws ConfigurationException {
CompositeConfiguration config = new CompositeConfiguration();
//config.addConfiguration(new SystemConfiguration());
config.addConfiguration(new PropertiesConfiguration("cfgtest/test1.properties"));
String usernaem = config.getString("username");
String password = config.getString("password");
System.out.println(usernaem + " " + password);
}
}
cfgtest/test1.properties
username = lavasoft
password = leizhimin
运行结果:
lavasoft leizhimin
Process finished with exit code 0
比如我们要读一个properties文件:在classpath下面建立目录te,之后在te下面建立
test.properties
Java代码
- ip=127.0.0.1
- port=8080
- id=111
- application.name = Killer App
- application.version = 1.6.2
- application.title = ${application.name} ${application.version}
- keys=cn,com,org,uk,edu,jp,hk
java:
Java代码
- //注意路径默认指向的是classpath的根目录
- Configuration config = new PropertiesConfiguration("te/test.properties");
- String ip=config.getString("ip");
- int port=config.getInt("port");
- String title=config.getString("application.title");
- //再举个Configuration的比较实用的方法吧,在读取配置文件的时候有可能这个键值对应的值为空,那么在下面这个方法中
- //你就可以为它设置默认值。比如下面这个例子就会在test.properties这个文件中找id的值,如果找不到就会给id设置值为123
- //这样就保证了java的包装类不会返回空值。虽然功能很简单,但是很方便很实用。
- Integer id=config.getInteger("id", new Integer(123));
- //如果在properties 文件中有如下属性keys=cn,com,org,uk,edu,jp,hk
- //可以实用下面的方式读取:
- String[] keys1=config.getStringArray("keys");
- List keys2=config.getList("keys");
首先要把这个文件读到程序中,我们可以用上面的类,所有的读取文件的类都 继承自AbstractConfiguration类,
而这个类实现了Configuration接口,如果我们只有比较简单的需求,那么可以直接向上转型为Configuration类型,如果向上
转型为AbstractConfiguration类,那么可以做一些配置工作。
比如刚刚看到的 keys=cn,com,org,uk,edu,jp,hk这个例子中如果是keys=cn/com/org/uk/edu/jp/hk
那么如果还按照原来的方式读取,读到的将是"cn/com/org/uk/edu/jp/hk"这个字符串,所以要先改变分割符之后在读
即
Java代码
- AbstractConfiguration.setDefaultListDelimiter(‘/‘);
- Configuration config = new PropertiesConfiguration("te/Vasp.properties");
- String[] keys=config.getStringArray("keys");
- List key2=config.getList("keys");
如果你看它的源码,你会在 AbstractConfiguration这个类中找到:
Java代码
- private static char defaultListDelimiter = ‘,‘;
这下你明白了吧!
三、解析XML配置文件
XML配置文件内容:
Xml代码
- <engine-config>
- <start-criteria>
- <criteria type="critical">
- Temperature Above -10 Celsius
- </criteria>
- <criteria>
- Fuel tank is not empty
- </criteria>
- </start-criteria>
- <name>
- <first>Tom</first>
- <last>Payne</last>
- </name>
- <horsepower>42</horsepower>
- </engine-config>
这个XML配置文件的内容可以被commons 提供的的的DOMConfiguration类加载, DOMConfiguration类使用Xerces XML 解析器把全部的XML文件解析为DOM 文件,,可以参照下面的实现:
Java代码
- import org.apache.commons.configuration.Configuration;
- import org.apache.commons.configuration.DOMConfiguration;
- String resource = "com/discursive/jccook/configuration/global.xml";
- Configuration config = new DOMConfiguration(resource);
- // Retrieve a list of all Criteria elements
- List startCriteria = config.getList("start-criteria.criteria");
- // Retrieve the value of the first criteria element
- String firstCriteria = config.getString("start-criteria.criteria(0)");
- // Retrieve the type attribute of the first criteria element
- String firstCriteriaType = config.getString("start-criteria.criteria(0)[@type]");
- // Retrieve the horsepower as an int
- int horsepower = config.getInt("horsepower");
传一个字符串作为DOMConfiguration 构造方法的参数,DOMConfiguration从类路径中装这载XML文件作为一种资源,如果你需要从file对象中装载XML配置文件,你可以传File object.
DOMConfiguration仅在Xerves XML parser有用的时候(即在类编译路径中有相关类)时可用,如果没有这个JAR包,我们可以利用XMLConfiguration另外的实现类:DOM4JConfiguration,这两种方法使用DOM4J来解析XML文件,当然,这时你需要配置DOM4J的包。