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

时间:2016-09-21 08:50:51

标签: java property-files

我希望更改属性文件中的属性值。 我试过一些方法,比如FileInputStream / FileOutputStream或Apache的库,但是所有这些都改变了文件结构。

我的文件结构是:

#[Section 1]
prop1=value1
prop2=value2

#[Section 2]
prop2=value2
prop4=value4

执行代码后,属性会更改,但"部分"项目消失,文件只包含无序属性列表 有没有办法保留上面的结构?

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

4 个答案:

答案 0 :(得分:1)

我已经使用了apache commons-configuration并且它运行良好:

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

整个结构不会改变。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

然而,似乎你可以写它并且所有,你可以选择XML属性文件。请参阅Properties API,其中包含loadFromXML和storeToXML。这也是UTF-8能力。

答案 3 :(得分:0)

例如:

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