星期六, 8月 20, 2011

使用apache common configuration读取配置文件或修改配置文件

使用apache common configuration读取配置文件或修改配置文件

    版权所有,欢迎转载,转载请注明转自http://www.suneca.com

      最近在做项目的时候,需要在页面上显示系统的配置信息并且允许用户通过WEB交互方式修改配置文件。
刚刚开始想采用数据库,但是这样子不太好,就一个配置信息也写进数据库,写入数据库也就一条记录而已, 有点浪费了。
    后来,决定采用xml来记录这个配置文件。在网上无意间发现,原来apache的common项目下面有一个子项目叫configuration, 可以读取properties,xml等文件,并且还提供了修改,新建配置文件等功能。
可能用多了apache,总觉得apache的东西就是好,也懒得去通过dom或sax来做这一方面的工作了,解析也是痛苦的事情,对于我这个经验不丰富的人来讲。最后决定采用它。 
上apache,下载了一个最新版本1.1。
注意:configuration里面使用了common collections新的类,最新版本是3.1,所以还需要更新一下工程的库 

项目采用的是XML文件的配置,部分XML配置大概如下:
程序代码 程序代码
<?xml version="1.0" encoding="UTF-8"?> 
<mung-frog-config> 
    <mail> 
      <mailhost>mail.suneca.com</mailhost> 
      <mailuser>admin</mailuser> 
      <mailpassword>123456</mailpassword> 
      <mailsubject>suneca mung frog code generation project</mailsubject> 
      <mailtemplate>/WEB-INF/pages/common/mail_template.html</mailtemplate>           
    </mail> 
</mung-frog-config>


读取配置文件的代码如下:
程序代码 程序代码
//新建一个xml configuration类 
XMLConfiguration config = new XMLConfiguration(); 
//得到当前配置文件的路径 
String path = new File("resource/mungfrog.cfg.xml").getAbsolutePath(); 
File file = new File(path); 

config.setFile(file); 
config.load(); 

System.out.println(config.getProperty("mail.mailhost")); 
System.out.println(config.getProperty("mail.mailuser")); 
System.out.println(config.getProperty("mail.mailpassword"));


保存配置文件,假设现在需要增加一个抄送人的配置,代码片断:
程序代码 程序代码
//新建一个xml configuration类 
XMLConfiguration config = new XMLConfiguration(); 
//得到当前配置文件的路径 
String path = new File("resource/mungfrog.cfg.xml").getAbsolutePath(); 
File file = new File(path); 

config.setFile(file); 
config.load(); 

config.addProperty("mail.mailcc","yuzhechen@msn.com"); 
config.save();


生成的配置件:
程序代码 程序代码
<?xml version="1.0" encoding="UTF-8"?> 
<mung-frog-config> 
    <mail> 
      <mailhost>mail.suneca.com</mailhost> 
      <mailuser>admin</mailuser> 
      <mailpassword>123456</mailpassword> 
      <mailsubject>suneca mung frog code generation project</mailsubject> 
      <mailtemplate>/WEB-INF/pages/common/mail_template.html</mailtemplate>            
      <mailcc>yuzhechen@msn.com</mailcc> 
    </mail> 
</mung-frog-config>


注意,XMLConfiguration当中有一个方法是addProperty(String str,Object obj); 
如果增加配置信息是采用这个方法,不管你当前配置文件当中有没有这一项配置,都会增加这一项。 

在使用这个工具的时候发现一个问题,如果XMLConfiguration不是通过一个File来load,在保存配置文件的时候会报一个空指针的异常 
例如:
程序代码 程序代码
ClassLoader loader = MungFrogConfig.class.getClassLoader(); 
InputStream is = loader.getResourceAsStream("mungfrog.cfg.xml"); 
config.load(is); 
config.addProperty("mail.mailcc","yuzhechen@msn.com"); 
config.save();


这此会报一个空指针的异常,因为file找不到,为什么会有这样的问题呢?我也不知道,问apache吧!可能是BUG吧,我也只能这么说。 

还有,如果你的开发工具用的是JBUILDER,读取没有问题,但是,保存配置的时候,它都会在project home生成一个新的配置文件,郁闷, 
为什么会有这样的问题呢?原因就是jbuilder认为project home就是工程的根路径。 

沒有留言: