加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

grails – 如何在Java属性文件中维护键的顺序?

发布时间:2020-12-14 05:42:48 所属栏目:Java 来源:网络整理
导读:我有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.
我有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(小心!),这不是我说的通常的决定……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读