按顺序从 Java 属性文件中提取值?

2022-09-01 05:32:38

我有一个属性文件,其中值的顺序很重要。我希望能够循环访问属性文件并根据原始文件的顺序输出值。

但是,由于属性文件由以下人员支持:如果我错了,请更正我,一个不维护插入顺序的 Map,迭代器以错误的顺序返回值

这是我正在使用的代码

Enumeration names = propfile.propertyNames();
while (names.hasMoreElements()) {
    String name = (String) names.nextElement();
    //do stuff
}

除了编写我自己的自定义文件解析器之外,是否还可以按顺序获取属性?


答案 1

扩展 、覆盖和:java.util.Propertiesput()keys()

import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Properties;
import java.util.HashMap;

public class LinkedProperties extends Properties {
    private final HashSet<Object> keys = new LinkedHashSet<Object>();

    public LinkedProperties() {
    }

    public Iterable<Object> orderedKeys() {
        return Collections.list(keys());
    }

    public Enumeration<Object> keys() {
        return Collections.<Object>enumeration(keys);
    }

    public Object put(Object key, Object value) {
        keys.add(key);
        return super.put(key, value);
    }
}

答案 2

否 - 地图本质上是“无序的”。

你可以创建自己的子类,其中覆盖并可能覆盖,但它可能会变得非常特定于实现... 是封装不良的一个主要例子。当我最后一次编写扩展版本(大约10年前!)时,它最终变得可怕,并且对的实现细节非常敏感。PropertiessetPropertyputPropertiesProperties