关闭

保持顺序的 Java Properties 类

标签: Properties
213人阅读 评论(0) 收藏 举报
分类:
Java 的 Properties 加载属性文件后是无法保证输出的顺序与文件中一致的,因为 Properties 是继承自 Hashtable 的, key/value 都是直接存在 Hashtable 中的,而 Hashtable 是不保证进出顺序的。

文章中已经给提供了代码,思路是继承自 Properties,覆盖原来的 put/keys,keySet,stringPropertyNames 即可,其中用一个 LinkedHashSet 来保存它的所有 key。完整代码如下:

[java] view plain copy
  1. <span style="font-family:Comic Sans MS;">package com.mstar.investmeplugin;  
  2.    
  3. import java.util.Collections;  
  4. import java.util.Enumeration;  
  5. import java.util.LinkedHashSet;  
  6. import java.util.Properties;  
  7. import java.util.Set;  
  8.    
  9. /** 
  10.  * OrderedProperties 
  11.  * @author liii 
  12.  * @date 2015-07-10 
  13.  */  
  14. public class OrderedProperties extends Properties {  
  15.    
  16.     private static final long serialVersionUID = -4627607243846121965L;  
  17.        
  18.     private final LinkedHashSet<Object> keys = new LinkedHashSet<Object>();  
  19.    
  20.     public Enumeration<Object> keys() {  
  21.         return Collections.<Object> enumeration(keys);  
  22.     }  
  23.    
  24.     public Object put(Object key, Object value) {  
  25.         keys.add(key);  
  26.         return super.put(key, value);  
  27.     }  
  28.    
  29.     public Set<Object> keySet() {  
  30.         return keys;  
  31.     }  
  32.    
  33.     public Set<String> stringPropertyNames() {  
  34.         Set<String> set = new LinkedHashSet<String>();  
  35.    
  36.         for (Object key : this.keys) {  
  37.             set.add((String) key);  
  38.         }  
  39.    
  40.         return set;  
  41.     }  
  42. }</span>  

调用方法


[java] view plain copy
  1. <span style="font-family:Comic Sans MS;">Properties props = new OrderedProperties();  
  2. props.load(fileInputStream);  
  3.    
  4. //通过 keys(), keySet() 或 stringPropertyNames 来遍历都能保证按文件中的顺序输出</span>  
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:144880次
    • 积分:4234
    • 等级:
    • 排名:第7471名
    • 原创:261篇
    • 转载:172篇
    • 译文:1篇
    • 评论:8条
    文章分类
    新浪微博
    最新评论