java - 如何阻止属性类以不合逻辑的顺序输出到文件。解决方法?

标签 java configuration

我正在尝试为我正在为 Minecraft 制作的 mod 生成属性文件。

该模组将大量依赖此属性文件。它应该看起来像这样:

#Comment
#More Comment
#Even more comment explaining.

Button1=Button1   #The data after the equals they would change
Button1Command=/help
Button2=Button2
Button2Command=/rules

这将重复超过 30 个按钮。下面是我用来在配置中生成 19 个选项的测试代码:

    Properties p = new Properties();

    try {
        File configDir = new File(Minecraft.getMinecraftDir(), "/config/");
        File config = new File(configDir, "FogHelperConfig.cfg");
        // set the properties value
        for(int c = 18;c >= 0;c--)
        {
        p.setProperty("Button"+c, "Button"+c);
        }
        // save properties minecraft config folder.
        p.store(new FileOutputStream(config), null);

    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

这个的输出

Button18=Button18
Button17=Button17
Button9=Button9
Button16=Button16
Button8=Button8
Button15=Button15
Button7=Button7
Button14=Button14
Button6=Button6
Button13=Button13
Button5=Button5
Button12=Button12
Button4=Button4
Button11=Button11
Button3=Button3
Button10=Button10
Button2=Button2
Button1=Button1
Button0=Button0

当然,当我处理一些需要按逻辑顺序排列的事情时,这是一个主要问题,因为它有编号。如果没有数字,我可以看到这是可以的,但在这种情况下它必须是有序的。

我假设我可以做一些事情或者某种解决方法来解决 Java Properties 类所存在的这个问题。我愿意拥有一个由我手工制作并与 mod 一起打包的属性文件,然后将其放置在特定位置,尽管我更希望生成它,因为它对用户更友好。

我需要做的另一件事是向这个 prop 文件添加注释,尽管我不太确定如何做。

欢迎任何不同的方式来做到这一点!不管怎样都有效!

提前致谢!

最佳答案

我使用下面的代码效果很好。自然排序对我来说已经足够好了。您可能必须将按钮命名为“Button01”。

import java.io.StringWriter;
import java.util.*;
public class SortedProperties extends Properties {
    @Override public Set<Object> keySet() {
        return Collections.unmodifiableSet(new TreeSet<Object>(super.keySet()));
    }
    @Override public synchronized Enumeration<Object> keys() {
        return Collections.enumeration(new TreeSet<Object>(super.keySet()));
    }
    public static void main(String[] args) throws Exception {
        Properties properties = new SortedProperties() {
            {
                for (int c = 18; c >= 0; c--) {
                    String name = "Button" + (c < 10 ? "0" : "") + c;
                    put(name, name);
                }
            }
        };
        StringWriter stringWriter = new StringWriter();
        properties.store(stringWriter, "foo");
        System.err.println(stringWriter.toString());
    }
    private static final long serialVersionUID = 1L;
}

关于java - 如何阻止属性类以不合逻辑的顺序输出到文件。解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385117/

相关文章:

使用 ExecutorService 时出现 java.util.ConcurrentModificationException

configuration - nginx catchallconf 文件未捕获所有内容

javascript - 一种允许 React 共享组件获取配置属性而无需一路向下传递的干净方法

jsp - 为遗留 Tomcat 应用程序指定 WEB-INF 的位置

magento - 打开系统配置时首先显示默认的自定义模块部分

Java Applet 随机存取存储

java 8 获取最大出现次数相等的元素

mysql - 如何在没有安装服务器的情况下设置 MySQL Workbench 的客户端配置?

Java:对象列表到字符串列表的可能转换

java - 允许 jTextField 为空?