`
shihuan830619
  • 浏览: 582880 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

common-configuration的一些应用

    博客分类:
  • J2EE
阅读更多
此程序依赖commons-configuration-1.6.jar和commons-lang-2.6.jar两个jar包。

需要先在工程的src目录下建立如下几个文件:
config.properties代码:
ip = 127.0.0.1     
port = 8081     
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
enname = 
include = configiiff.properties


configiiff.properties代码:
keysh = cn/com/org/uk/edu/jp/hk
myname =shihuan


xmltest.xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<gui-definition>      
	<colors>      
    	<background>#808080</background>      
    	<text>#000000</text>      
    	<header>#008000</header>      
    	<link normal="#000080" visited="#800080"/>      
    	<default>${colors.header}</default>      
  	</colors>      
  	<rowsPerPage>15</rowsPerPage>      
  	<buttons>      
    	<name>OK,Cancel,Help</name>      
    	<name>Yes,No,Cancel</name>      
  	</buttons>      
  	<numberFormat pattern="###\,###.##"/>      
</gui-definition>


database.xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<database>      
	<tables>      
    	<table tableType="system">      
      		<name>users</name>      
      		<fields>      
        		<field>      
          			<name>uid</name>      
          			<type>long</type>      
        		</field>      
        		<field>      
          			<name>uname</name>      
          			<type>java.lang.String</type>      
        		</field>      
        		<field>      
          			<name>firstName</name>      
          			<type>java.lang.String</type>      
        		</field>      
        		<field>      
          			<name>lastName</name>      
          			<type>java.lang.String</type>      
        		</field>      
        		<field>      
          			<name>email</name>      
          			<type>java.lang.String</type>      
        		</field>      
      		</fields>      
    	</table>      
    	<table tableType="application">      
      		<name>documents</name>      
      		<fields>      
        		<field>      
          			<name>docid</name>      
          			<type>long</type>      
        		</field>      
        		<field>      
          			<name>name</name>      
          			<type>java.lang.String</type>      
        		</field>      
        		<field>      
          			<name>creationDate</name>      
          			<type>java.util.Date</type>      
        		</field>      
        		<field>      
          			<name>authorID</name>      
          			<type>long</type>      
        		</field>      
        		<field>      
          			<name>version</name>      
          			<type>int</type>      
        		</field>      
      		</fields>      
    	</table>      
	</tables>      
</database>


config.ini代码:
; last modified 28 April 2011 by ShiHuan
[owner]
name=ShiHuan
organization=Acme Products
 
[database]
server=192.168.2.67     ; use IP address in case network name resolution is not working
port=1521

【注】:这里要简单介绍一下ini文件的格式,; 开头的是注释内容,每个[]是一个section,每个section下面有多个键值对。

TestConfiguration.java代码如下:
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.commons.configuration.AbstractConfiguration;
import org.apache.commons.configuration.AbstractFileConfiguration;
import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.INIConfiguration;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.log4j.Logger;

public class TestConfiguration {

	static Logger logger = Logger.getLogger(TestConfiguration.class);

	public static void readProperties(){
		//注意路径默认指向的是classpath的根目录      
		Configuration config = null;
		try {
			config = new PropertiesConfiguration("config.properties");
			String ip = config.getString("ip");
			System.out.println(ip);
			int port = config.getInt("port");  
			System.out.println(port);
			String title = config.getString("application.title");  
			System.out.println(title);
			//再举个Configuration的比较实用的方法吧,在读取配置文件的时候有可能这个键值对应的值为空,那么在下面这个方法中      
			//你就可以为它设置默认值。比如下面这个例子就会在test.properties这个文件中找id的值,如果找不到就会给id设置值为123      
			//这样就保证了java的包装类不会返回空值。虽然功能很简单,但是很方便很实用。      
			Integer id = config.getInteger("id", new Integer(123)); 
			System.out.println(id);
//			config.setProperty("enname", "Hello");      
//			((AbstractFileConfiguration) config).save();
			((AbstractFileConfiguration) config).isAutoSave();      
			config.setProperty("enname", "Hello");    
			String emmname = config.getString("enname");
			System.out.println(emmname);
			//如果在properties 文件中有如下属性keys=cn,com,org,uk,edu,jp,hk      
			//可以实用下面的方式读取:      
			String[] keys1 = config.getStringArray("keys");   
			for(int i=0; i<keys1.length; i++){
				System.out.println(keys1[i]);
			}
			System.out.println();
			System.out.println();
			List keys2 = config.getList("keys");
			for (Iterator iterator = keys2.iterator(); iterator.hasNext();) {
				String strKeys = (String) iterator.next();
				System.out.println(strKeys);
			}
			
			String myname = config.getString("myname");
			System.out.println(myname);
		} catch (ConfigurationException e) {
			logger.error(e.getMessage());
		}
	}
	
	public static void readPropertieshh(){
		try {
			AbstractConfiguration.setDefaultListDelimiter('/');  //设置指定分隔符     
			Configuration config = new PropertiesConfiguration("configiiff.properties");      
			String[] keys1 = config.getStringArray("keysh");    
			for(int i=0; i<keys1.length; i++){
				System.out.println(keys1[i]);
			}
			System.out.println();
			System.out.println();
			List keys2 = config.getList("keysh");
			for (Iterator iterator = keys2.iterator(); iterator.hasNext();) {
				String strKeys = (String) iterator.next();
				System.out.println(strKeys);
			}
		} catch (ConfigurationException e) {
			logger.error(e.getMessage());
		}
	}
	
	public static void readXml(){
		try {
			XMLConfiguration config = new XMLConfiguration("xmltest.xml");
			/**    
			    *<colors>    
			  *  <background>#808080</background>    
			  *  <text>#000000</text>    
			  *  <header>#008000</header>    
			  *  <link normal="#000080" visited="#800080"/>    
			  *  <default>${colors.header}</default>    
			  *</colors>    
			    *这是从上面的xml中摘抄的一段,我们现在来解析它,    
			    *colors是根标签下的直接子标签,所以是顶级名字空间    
			    */     
			String backColor = config.getString("colors.background");
			
			System.out.println(backColor);
			String textColor = config.getString("colors.text");    
			System.out.println(textColor);
			//现在我们知道了如何读取标签下的数据,那么如何读标签中的属性呢?看下面      
			//<link normal="#000080" visited="#800080"/>      
			String linkNormal = config.getString("colors.link[@normal]");   
			System.out.println(linkNormal);
			//还支持引用呢!      
			//<default>${colors.header}</default>      
			String defColor = config.getString("colors.default");  
			System.out.println(defColor);
			//也支持其他类型,但是一定要确定类型正确,否则要报异常哦      
			//<rowsPerPage>15</rowsPerPage>      
			int rowsPerPage = config.getInt("rowsPerPage");
			System.out.println(rowsPerPage);
			
			//加属性
			config.addProperty("shihuan", "shihuan");
			config.addProperty("updatehala", "updatehala");
			System.out.println(config.getString("shihuan"));
			System.out.println(config.getString("updatehala"));
			
			//获得同名结点的集合
			List buttons = config.getList("buttons.name");      
			for(Object button : buttons){      
				System.out.println(button.toString());      
			}
			
			System.out.println();
			System.out.println();
			
			//取消分隔符
			XMLConfiguration configList = new XMLConfiguration();
			configList.setDelimiterParsingDisabled(true);
			configList.setFileName("xmltest.xml");      
			configList.load();
			List buttonsList = configList.getList("buttons.name");      
			for(Object buttonList : buttonsList){      
				System.out.println(buttonList.toString());      
			}
			
			//更复杂的xml文件
			XMLConfiguration configXml = new XMLConfiguration();      
			configXml.setDelimiterParsingDisabled(true);      
			configXml.setFileName("database.xml");      
			configXml.load();      
	        Object prop = configXml.getProperty("tables.table.name");      
	        if(prop instanceof Collection) {      
	            System.out.println("Number of tables: " + ((Collection) prop).size());      
	        }
	        
	        //return users      
	        System.out.println(configXml.getProperty("tables.table(0).name"));      
	        //return system      
	        System.out.println(configXml.getProperty("tables.table(0)[@tableType]"));      
	        //return documents      
	        System.out.println(configXml.getProperty("tables.table(1).name"));      
	        //return null,因为只有两个table所以这个值为null      
	        System.out.println(configXml.getProperty("tables.table(2).name"));      
	        //return [docid, name, creationDate, authorID, version]      
	        //如果所要找的节点不存在唯一值,则返回Collection类型      
	        System.out.println(configXml.getProperty("tables.table(1).fields.field.name"));      
	        //[long, long]      
	        //与上面的相同,返回值不唯一      
	        System.out.println(configXml.getProperty("tables.table.fields.field(0).type"));      
	        //return creationDate      
	        System.out.println(configXml.getProperty("tables.table(1).fields.field(2).name"));    
		} catch (ConfigurationException e) {
			logger.error(e.getMessage());
		}      
		
	}
	
	public static void readIni(){
		try {
			INIConfiguration config = new INIConfiguration("config.ini");
			String basestr = config.getBasePath();
			System.out.println(basestr);
			String filestr = config.getFileName();
			System.out.println(filestr);
			String pathstr = config.getPath();
			System.out.println(pathstr);
			Set zykhstr = config.getSections();
			for(Object setVal : zykhstr){
				System.out.println(setVal.toString());
			}
			System.out.println();
			System.out.println();
			for(Iterator iter = config.getKeys(); iter.hasNext();){
				System.out.println(iter.next().toString());
				System.out.println(config.getString(iter.next().toString()));
			}
			
		} catch (ConfigurationException e) {
			logger.error(e.getMessage());
		} 
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		TestConfiguration.readProperties();
//		TestConfiguration.readPropertieshh();
//		TestConfiguration.readXml();
		TestConfiguration.readIni();
	}

}

//笔者在实际工作中封装好的类如下:
import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

/**
 * Created with IntelliJ IDEA.
 * User: yushibo
 * Date: 12-9-4
 * Time: 上午10:06
 * To change this template use File | Settings | File Templates.
 */
public class PropertiesUtil {
    /**
     * 获取某个properties文件中的某个key对应的value值
     * @param fileName
     * @param key
     * @return 返回key说对应的value值
     * */
    public static String getPropertiesValue(String fileName, String key){
        CompositeConfiguration config = new CompositeConfiguration();
        PropertiesConfiguration pc = null;
        try {
            pc = new PropertiesConfiguration(fileName);
            config.addConfiguration(pc);

            String filevalue = config.getString(key).trim();
            return filevalue;
        } catch (ConfigurationException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 获取某个properties文件中的某个key对应的value值(值是个数组)
     * @param fileName
     * @param key
     * @param delimiter
     * @return 返回key说对应的value数组值(使用时遍历数组值后要加.trim())
     * */
    public static String[] getPropertiesValues(String fileName, String key, char delimiter){
        CompositeConfiguration config = new CompositeConfiguration();
        PropertiesConfiguration pc = null;
        try {
            if(!Character.isWhitespace(delimiter)){
               AbstractConfiguration.setDefaultListDelimiter(delimiter);
            }
            pc = new PropertiesConfiguration(fileName);
            config.addConfiguration(pc);

            String[] filevalues = config.getStringArray(key);
            return filevalues;
        } catch (ConfigurationException e) {
            e.printStackTrace();
        }

        return null;
    }
}
分享到:
评论

相关推荐

    官方commons-configuration-1.10的jar包

    在实际应用中,Apache Commons Configuration 可以广泛应用于服务器配置、Web应用程序、桌面应用等各个领域,极大地提高了开发效率和代码的可维护性。通过使用这个库,开发者可以专注于实现业务逻辑,而不用过多关心...

    Common-Configuration

    在压缩包文件名称"Common-Configuration_Test"中,“Test”通常表示这是一个测试文件或者测试目录,可能包含了一些示例代码、测试用例或者单元测试,用于验证“Common-Configuration”的功能是否正常工作。...

    commons-configuration

    2. **动态更新**:不同于传统的配置文件只能在应用启动时读取,Commons Configuration 允许在运行时监测配置文件的变化,并自动更新配置,无需重启应用。 3. **配置合并**:可以将多个配置源组合在一起,形成一个...

    hadoop-common-0.23.8.jar_hadoop_

    使用"Hadoop-common-0.23.8.jar",开发者和数据分析师能够构建和运行各种Hadoop应用,实现大数据的存储、处理和分析。在实际应用中,这个jar文件通常会与Hadoop的其他组件一起部署,共同构成一个完整的Hadoop集群。 ...

    Common-log 和log4j2 配合使用

    其核心思想是解耦日志实现和应用程序,使得开发者可以自由选择喜欢的日志实现,如`log4j`、`java.util.logging`或`SimpleLog`等。 `log4j2`是`log4j`的升级版,是一个功能强大且性能高效的日志框架,提供了丰富的...

    nginx-common-configuration:Nginx常用配置

    动机:至少过去四年来我一直在使用nginx,我实际上为30多家公司和初创公司的数百种设置进行了配置:站点,应用程序,websocket,代理,负载平衡,从几千个rps等等。我对感到有点失望。 最后一滴是:该文章未提供完整...

    common-quartz.zip

    在SpringBoot应用中,可以使用`@Configuration`和`@EnableScheduling`注解,配合`@Bean`来实现: ```java import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Trigger; import org....

    zhiyubujian-common-starter-master_java_

    在"zhiyubujian-common-starter"中,我们可以预见到一些常见的功能模块,比如: 1. **配置模块**:提供了一套统一的配置方式,可能包含自动配置(Auto Configuration)和自定义配置(Custom Configuration)。自动...

    PyPI 官网下载 | azure-common-1.1.4.zip

    在`azure-common`库中,还有许多其他的辅助类和函数,如`AzureHttpError`用于处理HTTP请求中的异常,`CloudError`用于处理Azure服务返回的错误,以及`Configuration`类用于管理配置设置。 此外,`azure-common`库还...

    util-jvm_2.9.2-6.13.2.zip

    《util-jvm_2.9.2-6.13.2.zip与common-configuration.zip在开源项目中的应用解析》 在IT行业中,开源项目扮演着至关重要的角色,它们为开发者提供了丰富的工具和资源,降低了软件开发的门槛,提高了开发效率。本篇...

    common-jars.zip

    标题 "common-jars.zip" 提供的信息表明这是一个包含与MyBatis框架相关的Java库的压缩文件。描述中提到的 "commons-dbcp.jar" 和 "commons-pool.jar" 是两个重要的组件,它们在MyBatis中用于数据库连接池管理。下面...

    PyPI 官网下载 | aws-cdk.aws-autoscaling-common-1.30.0.tar.gz

    通过使用`aws-cdk.aws-autoscaling-common`库,开发人员可以更高效地编写和维护与AWS Auto Scaling相关的基础设施代码,提高生产力,并确保应用的弹性与可靠性。同时,由于它基于Python,开发者可以利用Python的强大...

    common-logging1.1.1jar

    1. **配置日志实现**:通过系统属性(如`java.util.logging.config.file`或`log4j.configuration`)或者在类路径下放置对应的配置文件,指定日志实现及其配置。 2. **获取Log实例**:通过`LogFactory.getLog(Class...

    初始化数据库链接信息

    本主题将详细探讨如何使用`common-configuration`、`slf4j`和`logback`组件来实现这一目标。 `common-configuration`是一个通用的配置管理框架,它允许开发人员将配置信息从代码中分离出来,存储在外部文件中,如...

    apache-common最全的jar包

    6. **commons-configuration-1.6.jar**: 提供了灵活的配置管理机制,支持从多种来源(如 XML、属性文件、系统环境变量等)读取配置信息,使得应用的配置更加动态和易于管理。 7. **commons-net-3.0.1.jar**: 包含了...

    Hibernate框架搭建及数据库相关操作

    Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了 Java 应用程序与数据库之间的交互。在这个教程中,我们将逐步介绍如何搭建 Hibernate 框架,并进行基本的数据库操作。 **一、Hibernate 概述** ...

    s3training-common-dbconnect

    9. **Spring框架集成**:如果项目使用Spring框架,那么数据库连接可能通过Spring的`@Configuration`和`@Bean`注解来配置,或者利用Spring Data JPA、MyBatis等ORM框架简化数据访问。 10. **安全性**:考虑到数据...

    apache-commons源码及jar文件

    Commons-Configuration 工具对各种各式的配置和参考文件提供读取帮助. Daemon 一种 unix-daemon-like java 代码的替代机制 DBCP Commons-DBCP 提供数据库连接池服务 DbUtils DbUtils 是一个 JDBC helper 类库,...

    spring-common-test:通用Spring框架测试实用程序

    总结,"spring-common-test"是Spring Framework中不可或缺的测试工具集,它极大地简化了Spring应用的测试工作,提高了测试的效率和质量。通过理解和熟练运用这些工具,开发者能够更好地实现高质量的代码,保证软件的...

Global site tag (gtag.js) - Google Analytics