保持顺序的 Java Properties 类

Java 的 Properties 加载属性文件后是无法保证输出的顺序与文件中一致的,因为 Properties 是继承自 Hashtable 的, key/value 都是直接存在 Hashtable 中的,而 Hashtable 是不保证进出顺序的。

总有时候会有关心顺序一致的需求,恰如有 org.apache.commons.collections.OrderdMap(其实用 LinkedHashMap 就是保证顺序) 一样,我们也想要有个 OrderdProperties。网上查了下还真有:

http://livedocs.adobe.com/jrun/4/javadocs/jrunx/util/OrderedProperties.html

http://www.openrdf.org/doc/alibaba/2.0-rc4/apidocs/org/openrdf/repository/object/composition/helpers/OrderedProperties.html

不过没找到源码,其实自己写一个 OrderedProperties  也不难,并不需要重头写起,只要继承自 Properties,覆盖原来的 put/keys,keySet,stringPropertyNames 即可,其中用一个 LinkedHashSet 来保存它的所有 key。完整代码如下:

用法:

一直都是 StackOverflow 威武,本文主要参考自: http://stackoverflow.com/questions/1312383/pulling-values-from-a-java-properties-file-in-order

再看一个在 Playframework1 中的保持顺序的 OrderSafeProperties 的实现 https://github.com/playframework/play1/blob/master/framework/src/play/utils/OrderSafeProperties.java

本文链接 https://yanbin.blog/ordered-java-properties-class/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

3 Comments
Inline Feedbacks
View all comments
chenfei
chenfei
5 years ago

答主,你还要覆盖HashTable的remove方法,否则删除Properties的时候会抛出异常。

Jovons
Jovons
8 years ago