基本上,我必须通过 Java 应用程序覆盖 .properties 文件中的某个属性,但是当我使用 Properties.setProperty() 和 Properties.Store() 时,它会覆盖整个文件而不仅仅是那个属性。
我已经尝试使用 append = true 构建 FileOutputStream,但是它添加了另一个属性并且不会删除/覆盖现有属性。
我如何编写代码以便设置一个属性覆盖该特定属性,而不覆盖整个文件?
编辑:我尝试读取文件并添加到其中。这是我更新的代码:
FileOutputStream out = new FileOutputStream("file.properties");
FileInputStream in = new FileInputStream("file.properties");
Properties props = new Properties();
props.load(in);
in.close();
props.setProperty("somekey", "somevalue");
props.store(out, null);
out.close();
原文由 user890704 发布,翻译遵循 CC BY-SA 4.0 许可协议
Properties
API 不提供任何在属性文件中添加/替换/删除属性的方法。 API 支持的模型是从一个文件加载所有属性,对内存中的对象Properties
对象进行更改,然后将所有属性存储到一个文件(相同的或不同的一)。但是
Properties
API 在这方面并不罕见。实际上,如果不重写整个文件,很难实现文本文件的就地更新。这种困难是现代操作系统实现文件/文件系统的方式的直接结果。如果你真的需要进行增量更新,那么你需要使用某种数据库来保存属性,而不是“.properties”文件。
其他答案以各种形式建议了以下方法:
Properties
对象中。Properties
对象。Properties
对象。这适用于某些用例。然而,加载/保存可能会重新排序属性,删除嵌入的注释和空白。这些事情 可能 很重要1 。
另一点是,这涉及重写整个属性文件,OP 明确尝试2避免这种情况。
1 - 如果 API 是按照设计者的意图使用的,那么属性顺序、嵌入注释等都 _无关紧要_。但是让我们假设 OP 出于“务实原因”这样做。
2 - 并不是说避免这种情况是 可行 的;早点看。