莫问 发表于 2016-12-30 10:11:56

Apache Commons-Configuration

【文章出处】http://wangxin0072000.iyunv.com/blog/186009
Apache Commons-configuration 学习笔记
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
等等...
3 上面已经对它做了基本的介绍,下面看看这个包怎么用吧
比如我们要读一个properties文件:在classpath下面建立目录te,之后在te下面建立
test.properties

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


//注意路径默认指向的是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"这个字符串,所以要先改变分割符之后在读


AbstractConfiguration.setDefaultListDelimiter('/');   
Configuration config = new PropertiesConfiguration("te/Vasp.properties");   
String[] keys=config.getStringArray("keys");   
List key2=config.getList("keys");

如果你看它的源码,你会在 AbstractConfiguration这个类中找到:

private static char defaultListDelimiter = ',';


如果你确定要解析的文件是properties
那么你完全可以使用

PropertiesConfiguration config = new PropertiesConfiguration("tt/t.properties");

代替

Configuration config = new PropertiesConfiguration("tt/t.properties");

这么写似乎不符合面向接口编程,但是它可以使用PropertiseConfiguration中特殊的方法。
比如,你如果你想修改propertise文件,那么可以这样:

config.setProperty("id", "sss");   
config.save();

当然,你还可以使用isAutoSave这个方法:

config.isAutoSave();   
config.setProperty("tttt", "sss");

properties这个类还支持文件的继承,比如在test.properties这个文件中有

include = test1.properties

同时在classpath中又有test1.properties这个文件,那么PropertiesConfiguration类就可以
从test1.properties文件中读取信息。
页: [1]
查看完整版本: Apache Commons-Configuration