PropertiesConfiguration学习与使用

PropertiesConfiguration学习与使用

前言:

假设有这样的需求,需要按照文件的顺序读取Properties文件,这时该怎么做。直接使用java.util.Properties是做不到的,因为Properties继承自Hashtable;随便搜索一下就可以得到一个,继承Properties,自己维护一个LinkedHashSet的解法。这个方法当然可以解,但再次假如基础上我还要保证我修改Properties调用save之后的文件保持顺序,就比较麻烦了,更别说我还想加些注释。自己实现这么个东西想想就头大,好在Apache已经帮我们做好了,这就是PropertiesConfiguration,人活着,还是要抱紧大腿。
先说好,我用的是org.apache.commons.configuration 1.10,而不是2.1.1。2.1.1的初始化太长看着难受。

一、Properties能做的它都能做

    //先看看Properties
    String propertiesFileName="a.properties";
    Properties props = new Properties();
    props.load(new FileInputStream(propertiesFileName));
    String value =props.getProperties("key");

    //然后是PropertiesConfiguration
    PropertiesConfiguration propsConfig=new PropertiesConfiguration();
    //默认的编码格式是ISO-8859-1,所以才在读取文件之前先设置了编码格式
    propsConfig.setEncoding("UTF-8")
    propsConfig.load(propertiesFileName);
    String strValue=propsConfig.getString("key");
    String longValue=propsConfig.getLong("longKey");
    String[] strArray=propsConfig.getStringArray(arrayKey);
    //值得一提的是。propsConfig的默认分割符是',',换句话说,如果值使用','分割,使用getString去取的话是会抛出异常的,因为这被认为是个数组,分割符可以使用setListDelimiter设置。
    ...
    props.setProperty(someKey,someValue);
    props.clearProperty(someKey);
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

PropertiesConfig有所有基本类型的get方法,以及删除属性的clearProperty方法。load,save方法没什么区别就没写。。

二、除此之外还有什么?

2.1、遍历

Properties本身就是个Hashtable,使用遍历map的方法就好了。而PropertiesConfiguration并没有把它是用什么实现的暴露出来,而是提供了getKeys方法,返回迭代器,重要的是这个迭代器是按照文件顺序读取的。这就让人非常开心了。顺便一提,调用save方法保存的时候并不会改变文件顺序。

2.2、同步

假设使用Properties,我希望内存中的Properties对象的数据与文件总是保持同步,那我只能写个定时器,检查文件是否更新过,是否需要重新读取。但PropertiesConfiguration就不用,它提供了setReloadingStrategy方法,可以设置重加载策略,常见的有

 propsConfig.setReloadingStrategy(new FileChangedReloadingStrategy());
   
   
  • 1

当文件被修改时重新加载。除此之外还有。

 propsConfig.setAutoSave(true);
   
   
  • 1

修改属性之后自动保存。

2.3、一些让人快乐的功能

在PropertiesConfiguration中,我还发现了个好东西,叫做PropertiesConfigurationLayout,可以用get方法获取它。它能干什么呢?最让我感兴趣的是,它可以读写注释。注释是一个可以让几个月之后的自己变得开心的东西,所以何乐而不为呢。

    PropertiesConfigurationLayout layout=propsConfig.getLayout();
    String comment =layout.getComment();
    layout.setComment("some comment");
   
   
  • 1
  • 2
  • 3

除此之外PropertiesConfigurationLayout还有很多方法,我没都看,取决于是否需要了。

三、总结

我要告别java.util.Properties。

猜你喜欢

转载自blog.csdn.net/qq_34531925/article/details/81538652