将属性顺序放入属性文件Java

时间:2018-10-02 13:25:16

标签: java properties

当我执行以下代码来创建属性文件时,它不遵守顺序。

public Config() {
    this.configFile = new Properties();
    InputStream input = null;
    try {
        input = new FileInputStream("resources/config.properties");
        this.configFile.load(input);
    } catch (IOException e) {
        System.err.println("[ err. ] " + e);
    }
}

public static void initConfig() {
    if(!new File("resources/config.properties").exists()) {
        Properties prop = new Properties();
        prop.setProperty("test_key_1", "Value1");
        prop.setProperty("test_key_2", "Value2");
        prop.setProperty("test_key_3", "Value3");
        prop.setProperty("test_key_4", "Value4");
        prop.keySet();
        try {
            prop.store(new FileOutputStream("resources/config.properties"), null);
            System.out.println("[ info ] Configuration file successful created.");
        } catch (IOException e) {
            System.err.println("[ err. ] " + e);
        }
    }
}

打开config.properties时,我有这个提示:

test_key_3=Value3
test_key_2=Value2
test_key_1=Value1
test_key_4=Value4

我想要这个:

test_key_1=Value1
test_key_2=Value2
test_key_3=Value3
test_key_4=Value4

1 个答案:

答案 0 :(得分:1)

考虑使用另一种地图来存储这些属性。最简单的方法是根据已经存在的Properties对象创建它。

您没有提到要保留插入顺序还是要保持所谓的自然排序。根据情况,您可能要使用LinkedHashMapTreeMap

但是,现在您必须自己将对象输出到文件中,例如:

Map<Object, Object> map = new TreeMap<>(yourPropertiesObject);
try(PrintWriter printer = new PrintWriter(yourOutputFile)) {
  for (Entry<Object, Object> e : map.entrySet()) {
    printer.println(String.format("%s=%s", e.getKey(), e.getValue()));
  }
}