3

我正在使用 java 来操作属性文件。我有一个要求,比如我必须在更新之前注释掉一个属性值并添加具有新值的属性。喜欢

路径=c:\

我更新后应该是这样的

#path=c:\
路径=c:\my_folder

有可能做到这一点吗?下面是我用于编辑属性文件的代码。

        Properties prop=new Properties();
        String currentDirectary=System.getProperty("testDir");
        String path=currentDirectary+"/test.Properties";
        FileOutputStream out=new FileOutputStream(path,true);
        prop.setProperty("path","c:\\my_folder");
        prop.store(out, null);
4

2 回答 2

0

下面的“一种黑客”怎么样:只需构建一个comments包含旧值并将其传递给 store 方法,注释将写入文件的状态,因此您不会立即有一个注释的旧值新值。

这里有一些示例代码:

@Test
public void propCom() throws FileNotFoundException, IOException {
    Properties p = new Properties();
    FileReader fr = new FileReader("some.properties");
    p.load(fr);
    fr.close();

    StringBuilder comments = new StringBuilder("Some properties\n");

    String oldValue = p.getProperty("path");
    comments.append("path=");
    if(oldValue != null) {
        comments.append(oldValue);
    }
    comments.append("\n");

    p.setProperty("path", "c:\\some\\other\\dir");

    FileWriter fw = new FileWriter("some.properties");
    p.store(fw, comments.toString());
    fw.close();
}

从这个内容开始

path=c:\\

更新后的属性文件将如下所示

#Some properties
#path=c:\
#
#Thu May 09 00:41:49 CEST 2013
path=c\:\\some\\other\\dir
于 2013-05-08T22:47:45.270 回答
0

正如注释中所指出的,标准Properties类不处理逐行注释,而只是通过Properties#store方法处理初始注释。所以如果你想要这个功能,你必须自己编写代码。在这篇文章中,您可以找到一个可以轻松适应您的需求的替代实现。

于 2013-05-08T22:24:14.323 回答