我使用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。