0

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

我的文件结构是:

#[Section 1]
prop1=value1
prop2=value2

#[Section 2]
prop2=value2
prop4=value4

执行代码后,属性发生了变化,但“部分”项消失了,文件仅包含无序属性列表。
有没有办法保留上面的结构?

我尝试了这些方法:更新属性文件中的属性值而不删除其他值

4

4 回答 4

1

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

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

整个结构没有变化。

于 2016-09-21T09:20:09.700 回答
0

例如像这样:

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

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

于 2016-09-21T09:02:07.690 回答
0

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

于 2016-09-21T08:58:05.493 回答
0

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

但是,它似乎是可写的,而且您可以选择 XML 属性文件。请参阅带有 loadFromXML 和 storeToXML的Properties API 。这也支持 UTF-8。

于 2016-09-21T08:58:48.517 回答