在Property文件中注释掉一个属性

时间:2012-10-17 17:22:32

标签: java configuration-files

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

  

路径= C:\

我更新后应该像

  

#路径= 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);

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

下面的'hack'怎么样:只需构建一个包含旧值的comments并将其传递给store方法,注释将写入文件的stat,因此你不会有一个注释旧值后紧跟新值。

这里有一些示例代码:

@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