use*_*599 7 grails groovy gradle
我有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)
Run Code Online (Sandbox Code Playgroud)
当我将属性写入文件时,它会更改键的顺序.有没有办法维持与初始文件相同的顺序.
我是groovy的新手,请有人给出这个建议吗?
eme*_*esx 11
我检查了这个Properties类,结果证明它扩展了Hashtable,它不能保证其元素的排序.所以这就是输出文件混淆了键的原因.
在我看来,你必须至少覆盖两个方法:put为每个属性调用(按照它们发生的顺序),并keys在保存期间调用.你只需使用这个类而不是Properties那个.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我刚刚在你的场景中测试它并且它工作正常,但我肯定没有想到所有可能的情况.我们在Hashtable这里延伸(小心!),而不是我说的通常的决定......
| 归档时间: |
|
| 查看次数: |
2946 次 |
| 最近记录: |