在 运行 时间更改 属性 文件内的值

changing value inside property file at run time

我想更改 属性 文件中的 属性 值。 我尝试了一些方法,例如 FileInputStream/FileOutputStream 或 Apache 的库,但它们都改变了文件结构。

我的文件结构是:

#[Section 1]
prop1=value1
prop2=value2

#[Section 2]
prop2=value2
prop4=value4

执行代码后,属性发生变化,但"section"项消失,文件只包含一个无序属性列表。
有没有办法保留上面的结构?

我试过这些方法:Updating property value in properties file without deleting other values

更改任何文件的一般方法是读取文件内容,将文件内容保存在内存中,更改所需的内容并写回全部内容。如果您直接写入 属性 值,那么标记的部分将会消失。如果您将内容追加到文件末尾,则上述情况当然有一个例外。在其他任何地方,您都必须读取文件并将文件作为一个整体写入。

是的,整个文件都被重写了。属性也被缓存(你可以取消缓存它们),并且 属性 文件通常是资源文件,在 class 路径上,因此可能打包在 jar/war.

但是看起来你可以写它,你可以选择一个 XML 属性文件。请参阅 Properties API,其中包含 loadFromXML 和 storeToXML。这也支持 UTF-8。

例如像这样:

try(InputStream is = getClass().getResourceAsStream("my.properties")) {
    Properties properties = new Properties();
    properties.load(is);
    properties.setProperty("prop4", "CHANGED");
    props.store(out);
}    

请注意,写入属性文件并不常见。通常,您在分发中提供默认文件,用户可以更改值来配置系统。如果您需要存储应用程序数据,请考虑使用 the Java Preferences API.

我使用了 apache commons-configuration,它运行良好:

PropertiesConfiguration conf = new PropertiesConfiguration("p.properties");
conf.setProperty("prop3", "newValue");
conf.save();

整个结构没有变化。