【问题标题】:How to update a commented out property in Java?如何在 Java 中更新注释掉的属性?
【发布时间】:2026-02-19 05:50:01
【问题描述】:

我的属性文件具有如下属性:

#property1=
property2=asd

是否有适当的方法来取消评论和更改 property1?我正在查看 Apache Commons,但似乎没有不丑的方法可以做到这一点。以下内容不起作用,因为注释掉的属性一开始就不会被读取。

        PropertiesConfiguration config = new PropertiesConfiguration();
        PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout(config);
        layout.load(new InputStreamReader(new FileInputStream(new File(filePath))));
        config.setProperty("#property1", "new_value");
        FileWriter propsFile = new FileWriter(filePath, false);
        layout.save(propsFile);

【问题讨论】:

  • 是的。使用您喜欢的文本编辑器打开文件并删除#。不要忘记保存编辑后的文件。
  • 用记事本怎么样?
  • 你想在什么时候改变这个?在运行时?为什么不直接使用ifboolean 呢?
  • 您需要提供更多信息。您想以编程方式更改属性文件吗?
  • 是的,以编程方式。

标签: java properties


【解决方案1】:

我假设您正在寻找一种在代码中执行此操作的方法,而不是使用编辑器。

如果将属性文件读入java.util.Properties,则cmets全部丢失。

最好的办法是将属性文件读入字符串并使用正则表达式替换来更新字符串。

String newProperties = properties.replaceAll("^#*\s*property1=", "property1=");
Properties props = new Properties();
props.load(new StringReader(newProperties));

【讨论】:

  • 如果你使用 apache commons layout,评论不会丢失。
【解决方案2】:

扩展@garnulf 所说的,你想做config.setProperty("property1", "new_value");

您不是“取消注释”属性值,而是在运行时将属性添加到您的配置中。该文件不会被更改。

首次加载时,您的配置将不包括注释掉的属性(因为它已被注释掉)。当您调用 config.setProperty 时,它将被添加到您的配置中。

【讨论】:

  • 不幸的是我不想要这种行为。我只需要更新注释掉的属性,而不是在文件末尾添加一个
  • 是说您想以编程方式写入您的属性文件吗?你想让这些属性在你的 Java 程序中生效吗?