common-configuration的一些应用
需要先在工程的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;
- }
- }
- TestCommonsConfiguration.rar (4.2 KB)
- 下载次数: 30
common-configuration的一些应用的更多相关文章
- [译]ASP.NET 5: New configuration files and containers
原文:http://gunnarpeipman.com/2014/11/asp-net-5-new-configuration-files-and-containers/ ASP.NET vNext提 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block 到目前为止,我们使用的模块都是在同一个配置 ...
- 基于Common.Logging + Log4Net实现的日志管理
前言 Common.Logging 是Commons-Logging(apache最早提供的日志门面接口,提供了简单的日志实现以及日志解耦功能) 项目的.net版本.其目的是为 "所有的.n ...
- 在C#应用中使用Common Logging日志接口
我在C#应用中一般使用log4net来记录日志,但如果项目中有个多个工程,那么没有工程都需要引用log4neg,感觉很不爽.不过今日在开spring.net的时候,看到了有个通用日志接口Common ...
- ASP.NET Core 1.1.0 Release Notes
ASP.NET Core 1.1.0 Release Notes We are pleased to announce the release of ASP.NET Core 1.1.0! Antif ...
- MyEclipse 的 配置文件
D:\soft\i\myeclipse10\MyEclipse 10\configuration.settings\org.eclipse.ui.ide.prefs MAX_RECENT_WORKSP ...
- LinqToDB 源码分析——生成表达式树
当我们知道了Linq查询要用到的数据库信息之后.接下就是生成对应的表达式树.在前面的章节里面笔者就已经介绍过.生成表达式树是事实离不开IQueryable<T>接口.而处理表达式树离不开I ...
- window 使用vagrant搭建开发开发环境
# -*- mode: ruby -*-# vi: set ft=ruby : # All Vagrant configuration is done below. The "2" ...
- 【转】关于FLASH中图文混排聊天框的小结
原文链接 图文混排也是FLASH里一个很古老的话题了,我们不像美国佬那样游戏里面聊天框就是聊天框,全是文字干干净净,也不像日本人发明了并且频繁地使用颜文字.不管是做论坛.做游戏,必定要实现的一点就是带 ...
- EF7 - What Does “Code First Only” Really Mean
这篇文章很有价值,但翻译了一段,实在翻译不下去了,没办法,只能转载了. 英文地址:http://blogs.msdn.com/b/adonet/archive/2014/10/21/ef7-what- ...
随机推荐
- HDU4166【BFS】
题意: 给你一幅图,给你起点和终点,再给你机器人所面对的方向,机器人可以左转90°,右转90°,向前进一格,每种操作都是1秒,,求起点和终点最少花费下的路径条数,方案数: 思路: 这里有一个不同就是机 ...
- express框架之1
express框架: 1.依赖中间件 2.接受请求 get / post / use get('/地址' , function(req , resp ){}) post和use 同理 3.非破坏式 4 ...
- 编译keepalived 方法
作者的环境: redhat 6.5 64 位版 在编译keepalived 前,需要提前给环境安装两个依赖包--zlib和openssl 编译 zlib 库 参考作者之前的博客 http://www. ...
- IQueryable 和IEnumberable的区别
一.IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单的迭代.即:实现了此接口的object,就可以使用foreach遍历该object: 二.IQueryable 接口 ...
- SQL COUNT DISTINCT 函数
定义和用法 可以一同使用 DISTINCT 和 COUNT 关键词,来计算非重复结果的数目. 语法 SELECT COUNT(DISTINCT column(s)) FROM table 例子 注意: ...
- HDU6440(费马小定理)
其实我读题都懵逼--他给出一个素数p,让你设计一种加和乘的运算使得\[(m+n)^p = m^p+n^p\] 答案是设计成%p意义下的加法和乘法,这样:\[(m+n)^p\ \%\ p = m+n\] ...
- tera term超级终端
一款Window上的虚拟终端工具,它同时支持串口连接和网络连接,而对于网络连接它支持Telnet和SSH协议.最关键的是Tera Term支持自己的脚本语言,即TTL(Tera Term Langua ...
- centos7安装mysql5.7 使用yum
https://blog.csdn.net/z13615480737/article/details/78906598 使用yum,比较简单,不用考虑版本依赖问题
- I/O————字符流和流的关闭
Reader字符输入流 Writer字符输出流 用于字符的形式读取和写入数据 FileReader与FileWriter分别是Reader与Writer的子类 public class CharScr ...
- jQuery1.6.1源码分析系列(作者:nuysoft/高云)
作者:nuysoft/高云 QQ:47214707 Email:nuysoft@gmail.com jQuery源码分析(版本1.6.1) 00 前言开光 01 总体架构 02 正则表达式-RegEx ...