JAVA属性到XML排序



我使用JAVA属性到XML,我有这样的代码:

    Properties properties = new Properties();
    properties.put("TERMINAL_ID","1330");
    properties.put("ACTIVE_STATUS","1");
    properties.put("CARD_ACCEPT","EZ");
    properties.put("CARD_DENIED","LG,JK");
    properties.put("CARD_TIMEOUT","0");
    FileOutputStream outStream = null;
    try {
        outStream = new FileOutputStream(new File("./mod.xml"));
        properties.storeToXML(outStream, new java.util.Date().toString());
        outStream.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

为什么XML文件中的数据输出不按添加到属性的时间排序?

输出:

<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Fri Oct 09 16:46:46 WIB 2015</comment>
    <entry key="CARD_DENIED">LG,JK</entry>
    <entry key="CARD_ACCEPT">EZ</entry>
    <entry key="ACTIVE_STATUS">1</entry>
    <entry key="CARD_TIMEOUT">0</entry>
    <entry key="TERMINAL_ID">1330</entry>
</properties>

如何使输出如下:

<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Fri Oct 09 16:46:46 WIB 2015</comment>
    <entry key="TERMINAL_ID">1330</entry>
    <entry key="ACTIVE_STATUS">1</entry>
    <entry key="CARD_ACCEPT">EZ</entry>
    <entry key="CARD_DENIED">LG,JK</entry>
    <entry key="CARD_TIMEOUT">0</entry>
</properties>

实现这一目标的最佳方法是什么?谢谢你。

Properties对象是Hashtable的一个子类,这意味着键的顺序基本上是随机的。

但是,XML生成可能使用Map<Object, Object>的键遍历方法来生成XML文件,因此您可能可以覆盖键遍历方法来影响顺序。

你可以试试:

Properties p = new Properties() {
    @Override
    public Set<Object> keySet() {
        return new TreeSet<Object>(super.keySet());
    }
}

这是一个糟糕的想法,因为您依赖于Properties类的实现细节。如果您对XML输出有特定的要求,那么最好使用适当的XML绑定库,如JAXB。

最新更新