文档章节

保持顺序的 Java Properties 类

lee123lee
 lee123lee
发布于 2013/08/31 19:31
字数 312
阅读 63
收藏 0

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。完整代码如下:

package com.mstar.investmeplugin;
 

import java.util.Collections;

import java.util.Enumeration;

import java.util.LinkedHashSet;

import java.util.Properties;

import java.util.Set;
 
/**

 * OrderedProperties

 * @author Unmi

 * @date 2012-12-07

 */

public class OrderedProperties extends Properties {
 

    private static final long serialVersionUID = -4627607243846121965L;

     

    private final LinkedHashSet<Object> keys = new LinkedHashSet<Object>();
 

    public Enumeration<Object> keys() {

        return Collections.<Object> enumeration(keys);

    }
 

    public Object put(Object key, Object value) {

        keys.add(key);

        return super.put(key, value);

    }
 

    public Set<Object> keySet() {

        return keys;

    }
 

    public Set<String> stringPropertyNames() {

        Set<String> set = new LinkedHashSet<String>();
 

        for (Object key : this.keys) {

            set.add((String) key);

        }
 

        return set;

    }
}
用法:

Properties props =newOrderedProperties();
props.load(fileInputStream);
 
//通过 keys(), keySet() 或 stringPropertyNames 来遍历都能保证按文件中的顺序输出


© 著作权归作者所有

共有 人打赏支持
lee123lee
粉丝 51
博文 144
码字总数 122159
作品 1
闵行
高级程序员
私信 提问
从读取properties文件说开去,浅谈web容器中类加载器

今天刚好有人让我写个通过读取properties连接数据库的小demo. 汗啊,普通项目中可以使用的文件读取,在web项目中总报空指针异常. 查阅了资料明白,赶紧记录下来,希望遇到此类问题的童鞋能引起重...

jeffsui
2012/10/31
0
10
Mybatis 关键组件(注意各组件的最佳作用域)

Mybatis 几个使用时的重要组件 SqlSessionFactoryBuilder 这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 实例的最佳作用域...

xd03122049
07/22
0
0
Spring Boot 配置加载顺序详解

使用 Spring Boot 会涉及到各种各样的配置,如开发、测试、线上就至少 3 套配置信息了。Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发、测试、线上环境使用不同的配置。 在 Spri...

Java技术栈
08/27
0
0
Java类动态加载(二)——动态加载class文件

想要在jvm启动后,动态的加载class类文件,我们首先需要了解Instrumentation、Attach、Agent、VirtualMachine、ClassFileTransformer这几个类的用法和他们之间的关系。 Java的com.sun.tools...

2k10
2015/03/20
0
0
System.getProperty("user.dir")

System.getProperty("user.dir"); 获得系统属性 getProperties public static Properties getProperties() 确定当前的系统属性。 首先,如果有安全管理器,则不带参数直接调用其 checkPrope...

小落i
2014/03/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开发者和架构师之间最大的区别是什么?

1、开发者和架构师之间最大的区别是什么? 架构师和开发者一样,也经常写代码,简单的说,开发者和架构师之间最大的区别就是技术领导力。 软件架构师的角色需要理解最重要的架构驱动力是什么...

James-
29分钟前
1
0
java框架学习日志-4

补充一些spring配置文件的方法。 设置别名: <!--通过name直接设置别名--> <bean name="user2" class="cn.sxt.factory.UserDynamicFactory"> </bean> <!--有id的情况下也可以设置......

白话
32分钟前
2
0
20181213 上课截图

小丑鱼00
48分钟前
1
0
nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

https://stackoverflow.com/questions/15423500/nginx-showing-blank-php-pages For reference, I am attaching my location block for catching files with the .php extension: location ~......

Yao--靠自己
55分钟前
3
0
mac 没声音

somehow不时就会出现这种情况。之前都得重启。 其实可以直接在terminal里打以下命令: sudo kextunload /System/Library/Extensions/AppleHDA.kext sudo kextload /System/Library/Extension...

dubox
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部