首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

common-configuration的一些运用

2012-08-14 
common-configuration的一些应用此程序依赖commons-configuration-1.6.jar和commons-lang-2.6.jar两个jar

common-configuration的一些应用
此程序依赖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,hkenname = include = configiiff.properties


configiiff.properties代码:
keysh = cn/com/org/uk/edu/jp/hkmyname =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=ShiHuanorganization=Acme Products [database]server=192.168.2.67     ; use IP address in case network name resolution is not workingport=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();}}

热点排行