gpt4 book ai didi

java - 如何覆盖 .properties 中的一个属性而不覆盖整个文件?

转载 作者:IT老高 更新时间:2023-10-28 21:18:42 26 4
gpt4 key购买 nike

基本上,我必须通过 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();

最佳答案

Properties API 不提供在属性文件中添加/替换/删除属性的任何方法。 API 支持的模型是从文件中加载所有属性,对内存中的 Properties 对象进行更改,然后将所有属性存储到文件中(同一个或一个不同的)。

Properties API 在这方面并不罕见。实际上,如果不重写整个文件,就很难实现文本文件的就地更新。这种困难是现代操作系统实现文件/文件系统方式的直接后果。

如果您确实需要进行增量更新,那么您需要使用某种数据库来保存属性,而不是“.properties”文件。


其他答案以各种形式提出了以下方法:

  1. 将文件中的属性加载到 Properties 对象中。
  2. 更新 Properties 对象。
  3. 在现有文件的顶部保存 Properties 对象。

这适用于某些用例。但是加载/保存可能会重新排序属性,删除嵌入的注释和空白。这些事情可能很重要1

另一点是这涉及重写整个属性文件,OP 明确尝试2 避免。


1 - 如果 API 按照设计者的意图使用,那么属性顺序、嵌入的注释等等就没有重要了。但是让我们假设 OP 这样做是出于“务实的原因”。
2 - 避免这种情况实际;见较早。

关于java - 如何覆盖 .properties 中的一个属性而不覆盖整个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com