我有Groovy代码来读取属性文件并更改值,然后将其写入同一文件.
def props = new Properties() File propsFile = new File('C:/Groovy/config.properties') props.load(propsFile.newDataInputStream()) props.each { key,value -> if("${key}" == "ABC"){ props.setProperty("${key}","XYZ") } } props.store(propsFile.newWriter(),null)
当我将属性写入文件时,它会更改键的顺序.有没有办法维持与初始文件相同的顺序.
我是groovy的新手,请有人给出这个建议吗?
解决方法
我检查了属性类,结果证明它扩展了Hashtable,它没有对其元素的排序做出任何保证.所以这就是输出文件混淆了键的原因.
在我看来,你必须至少覆盖两个方法:put,为每个属性调用(按顺序发生),以及在保存期间调用的键.您只需使用此类而不是属性.
import java.util.*; public class OrderedProperties extends Properties { private final LinkedHashSet<Object> keyOrder = new LinkedHashSet<>(); @Override public synchronized Enumeration<Object> keys() { return Collections.enumeration(keyOrder); } @Override public synchronized Object put(Object key,Object value) { keyOrder.add(key); return super.put(key,value); } }
我刚刚在你的场景中测试它并且它工作正常,但我肯定没有想到所有可能的情况.我们在这里扩展Hashtable(小心!),这不是我说的通常的决定……