`

保持顺序的 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。完整代码如下:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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;
    }
}

用法:

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

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

分享到:
评论

相关推荐

    Java Properties 解决中文乱码和顺序读写.docx

    Java Properties 类是Java标准库中用于处理配置文件的关键组件,主要负责存储和加载键值对数据,常用于管理应用程序的配置信息。配置文件通常以`.properties`为扩展名,采用文本格式,每行包含一个键值对,键和值...

    java修改Properties文件,让输出格式与输入格式保持不变

    总结来说,这篇博客主要介绍了如何通过扩展Java的Properties类来保持Properties文件的原始格式。通过自定义的`SafeProperties`类,我们可以确保在处理配置文件时,无论是加载还是保存,都不会破坏原有的注释和行顺序...

    java Properties

    如果需要保持键的顺序,可以使用`LinkedProperties`类,它是`Properties`的一个扩展,保持插入顺序。 通过以上知识点,开发者可以有效地在Java项目中管理和读取`.prop`文件,实现配置信息的灵活存储和访问。在实际...

    能保存Properties文件注释的Properties工具类

    在Java编程中,Properties类是用于处理属性列表的,这些属性列表通常以键值对的形式存储,例如配置文件。然而,标准的java.util.Properties类在加载和保存文件时会忽略注释,这在某些场景下可能不够理想。针对这个...

    javaproperties:用于读写Java .properties文件的Python库

    javaproperties通过基于json模块的简单API提供对读写(简单的面向行格式和XML)的支持-尽管,为了恢复Java迷,它还包括旨在匹配行为的Properties类。 Python 尽可能多地使用 。 javaproperties版本的javaproperties...

    java生成properties文件工具类

    通过程序生成properties文件的工具类,并可根据添加顺序生成,可添加注释,调用步骤如下: 1.OutputOrderProperties p = new OutputOrderProperties(); 2.FileInputStream fs = new FileInputStream("文件路径"); 3....

    Java代码实现对properties文件有序的读写的示例

    Java代码实现对properties文件有序的读写的示例 本篇文章主要介绍了Java代码实现对properties文件...本篇文章提供了一个Java代码实现对properties文件有序的读写的示例,解决了Properties文件读写时元素顺序的问题。

    Properties 文件比较工具

    在Java中,`java.util.Properties`类是处理.properties文件的核心类。这个工具可能就是基于这个类进行扩展和定制的。`Properties`类允许加载和保存属性列表,支持键值对的形式,其中键和值都是字符串。通过调用`load...

    Java 常用类讲解

    Java 常用类是Java编程中不可或缺的部分,它们提供了丰富的功能,...总的来说,理解并熟练运用Java中的List接口(如ArrayList)、Map接口(如HashMap)和Properties类,将极大地提升你编写高效、健壮的Java代码的能力。

    Properties Editor for Eclipse

    5. **键值对排序**:为了保持文件整洁,Properties Editor允许用户按字母顺序排列键值对,便于管理和查找。 6. **比较和合并**:对于多语言版本的项目,插件可以比较不同语言的`.properties`文件,帮助开发者快速...

    Java常用工具类大全,工作5年精心整理.zip

    14. **`java.util.Properties`**:用于读写配置文件,常用于存储应用程序的配置参数。 15. **`java.util.PriorityQueue`**:优先队列,内部实现为堆,可以自动维护元素的排序。 以上仅是部分可能包含的工具类,...

    30个java工具类

    24. **Properties**: 存储键值对的类,常用于配置文件的读写。 25. **Random**: 生成随机数的类,支持整数和浮点数。 26. **System**: 提供系统级的属性和操作,如退出程序(`System.exit()`)。 27. **Arrays....

    java工具类

    18. **`java.util.Properties`**:处理配置文件,如读取和写入.properties文件。 19. **`java.util.Scanner`**:从标准输入、文件或其他输入流读取简单类型的数据。 20. **`java.util.regex`** 包:正则表达式处理...

    30个常用java工具类

    13. **`java.util.PriorityQueue`**:优先队列,元素按照特定顺序排列,如自然顺序或自定义比较器。 14. **`java.util.Stack`**:实现后进先出(LIFO)数据结构,常用作临时栈。 15. **`java.util.Scanner`**:从...

    java util 类

    `Properties`类用于处理属性文件,常用于配置文件的读取和写入。 `Iterator`和`Iterable`接口是遍历集合的主要方式,`Iterator`提供了`hasNext()`和`next()`方法来访问集合元素。 在实际开发中,`java.util`包还...

    28个java常用的工具类源码

    2. **HashMap 和 TreeMap**: HashMap实现了散列映射,提供O(1)的平均查找时间,而TreeMap则基于红黑树,保持键的排序顺序,适合对顺序有要求的场景。 3. **StringBuilder 和 StringBuffer**: 这两个类用于字符串...

    十二生肖和星座Java工具类.rar

    6. **国际化(I18N)**:如果工具类需要面向不同的用户,可以考虑使用资源包(Properties文件)来支持多语言显示生肖和星座的名称。 7. **单元测试**:为了确保工具类的正确性,编写单元测试是必要的。使用JUnit或...

    java对property文件的操作

    - **Properties类**:Java中的`Properties`类是一个用于存储字符串键值对的特殊集合类,主要用于处理文本格式的属性列表(如`.properties`文件)。它是`Hashtable`的一个子类,并添加了用于处理属性文件的方法。 - *...

    最最常用的 100 个 Java类分享

    56. `java.util.LinkedHashMap`:LinkedHashMap保持插入顺序的HashMap实现,也可以根据插入或访问顺序排序。 以上就是这100个常用Java类的简要介绍,它们在实际开发中扮演着至关重要的角色,理解和熟练使用这些类...

    27个java常用的工具类

    在Java编程中,工具类(Utility Class)是包含各种静态方法的类,这些方法用于执行特定的、重复的任务,以简化开发过程。这些类通常不包含任何实例变量,且其设计目的是为其他类提供服务。这里我们将探讨27个常用的...

Global site tag (gtag.js) - Google Analytics