commons configuration的简单使用和说明

Commons Configuration是一个java应用程序的配置管理工具。可以从properties或者xml文件中加载软件的配置信息,用来构建支撑软件运行的基础环境。在一些配置文件较多较的复杂的情况下,使用该配置工具比较可以简化配置文件的解析和管理。也提高了开发效率和软件的可维护性。
 
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代码  收藏代码
  1. ip=127.0.0.1  
  2. port=8080  
  3. id=111  
  4. application.name = Killer App  
  5. application.version = 1.6.2  
  6. application.title = ${application.name} ${application.version}  
  7. keys=cn,com,org,uk,edu,jp,hk  

java: 
Java代码  收藏代码
  1. //注意路径默认指向的是classpath的根目录  
  2. Configuration config = new PropertiesConfiguration("te/test.properties");  
  3. String ip=config.getString("ip");  
  4. int port=config.getInt("port");  
  5. String title=config.getString("application.title");  
  6. //再举个Configuration的比较实用的方法吧,在读取配置文件的时候有可能这个键值对应的值为空,那么在下面这个方法中  
  7. //你就可以为它设置默认值。比如下面这个例子就会在test.properties这个文件中找id的值,如果找不到就会给id设置值为123  
  8. //这样就保证了java的包装类不会返回空值。虽然功能很简单,但是很方便很实用。  
  9. Integer id=config.getInteger("id", new Integer(123));  
  10. //如果在properties 文件中有如下属性keys=cn,com,org,uk,edu,jp,hk  
  11. //可以实用下面的方式读取:  
  12. String[] keys1=config.getStringArray("keys");  
  13.     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代码  收藏代码
  1. AbstractConfiguration.setDefaultListDelimiter('/');  
  2. Configuration config = new PropertiesConfiguration("te/Vasp.properties");  
  3. String[] keys=config.getStringArray("keys");  
  4. List key2=config.getList("keys");  
如果你看它的源码,你会在 AbstractConfiguration这个类中找到: 
Java代码  收藏代码
  1. private static char defaultListDelimiter = ',';  
这下你明白了吧!
 

三、解析XML配置文件

XML配置文件内容: 

Xml代码  收藏代码
  1. <engine-config>  
  2.   
  3.     <start-criteria>  
  4.   
  5.         <criteria type="critical">  
  6.   
  7.             Temperature Above -10 Celsius  
  8.   
  9.         </criteria>  
  10.   
  11.         <criteria>  
  12.   
  13.             Fuel tank is not empty  
  14.   
  15.         </criteria>  
  16.   
  17.     </start-criteria>  
  18.   
  19.     <name>  
  20.   
  21.         <first>Tom</first>  
  22.   
  23.         <last>Payne</last>  
  24.   
  25.     </name>  
  26.   
  27.     <horsepower>42</horsepower>  
  28.   
  29. </engine-config>  

 这个XML配置文件的内容可以被commons 提供的的的DOMConfiguration类加载, DOMConfiguration类使用Xerces XML 解析器把全部的XML文件解析为DOM 文件,,可以参照下面的实现:

Java代码  收藏代码
  1. import org.apache.commons.configuration.Configuration;  
  2.   
  3. import org.apache.commons.configuration.DOMConfiguration;  
  4.   
  5.   
  6.   
  7. String resource = "com/discursive/jccook/configuration/global.xml";  
  8.   
  9. Configuration config = new DOMConfiguration(resource);  
  10.   
  11.           
  12.   
  13. // Retrieve a list of all Criteria elements  
  14.   
  15. List startCriteria = config.getList("start-criteria.criteria");  
  16.   
  17.   
  18.   
  19. // Retrieve the value of the first criteria element  
  20.   
  21. String firstCriteria = config.getString("start-criteria.criteria(0)");  
  22.   
  23.   
  24.   
  25. // Retrieve the type attribute of the first criteria element  
  26.   
  27. String firstCriteriaType = config.getString("start-criteria.criteria(0)[@type]");  
  28.   
  29.   
  30.   
  31. // Retrieve the horsepower as an int  
  32.   
  33. int horsepower = config.getInt("horsepower");  

传一个字符串作为DOMConfiguration 构造方法的参数,DOMConfiguration从类路径中装这载XML文件作为一种资源,如果你需要从file对象中装载XML配置文件,你可以传File object.

DOMConfiguration仅在Xerves XML parser有用的时候(即在类编译路径中有相关类)时可用,如果没有这个JAR包,我们可以利用XMLConfiguration另外的实现类:DOM4JConfiguration,这两种方法使用DOM4J来解析XML文件,当然,这时你需要配置DOM4J的包。

原文地址:https://www.cnblogs.com/sanhuan/p/4650556.html