当前位置:  开发笔记 > 编程语言 > 正文

如何使用排序键将java.util.Properties写入XML?

如何解决《如何使用排序键将java.util.Properties写入XML?》经验,为你挑选了2个好方法。



1> erickson..:

这是一个快速而肮脏的方法:

String propFile = "/path/to/file";
Properties props = new Properties();

/* Set some properties here */

Properties tmp = new Properties() {
  @Override
  public Set keySet() {
    return Collections.unmodifiableSet(new TreeSet(super.keySet()));
  }
};

tmp.putAll(props);

try {
    FileOutputStream xmlStream = new FileOutputStream(propFile);
    /* This comes out SORTED! */
    tmp.storeToXML(xmlStream,"");
} catch (IOException e) {
    e.printStackTrace();
}


以下是警告:

tmp属性(匿名子类)不符合属性的约定.

例如,如果你得到它keySet并试图从中删除一个元素,则会引发异常.所以,不要让这个子类的实例逃脱!在上面的代码片段中,您永远不会将其传递给另一个对象或将其返回给具有合法期望它履行属性合同的调用者,因此它是安全的.

Properties.storeToXML的实现可能会更改,导致它忽略keySet方法.

例如,未来版本或OpenJDK可以使用替代keys()方法.这就是为什么类应该始终记录它们的"自用"(Effective Java Item 15)的原因之一.但是,在这种情况下,最糟糕的情况是您的输出将恢复为未排序.HashtablekeySet

请记住,属性存储方法会忽略任何"默认"条目.



2> 小智..:

这是为store Properties.store(OutputStream out, String comments)和product生成排序输出的方法Properties.storeToXML(OutputStream os, String comment):

Properties props = new Properties() {
    @Override
    public Set keySet(){
        return Collections.unmodifiableSet(new TreeSet(super.keySet()));
    }

    @Override
    public synchronized Enumeration keys() {
        return Collections.enumeration(new TreeSet(super.keySet()));
    }
};
props.put("B", "Should come second");
props.put("A", "Should come first");
props.storeToXML(new FileOutputStream(new File("sortedProps.xml")), null);
props.store(new FileOutputStream(new File("sortedProps.properties")), null);

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有