Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注释掉属性文件中的属性_Java_Configuration Files - Fatal编程技术网

Java 注释掉属性文件中的属性

Java 注释掉属性文件中的属性,java,configuration-files,Java,Configuration Files,我正在使用java操作一个属性文件。我有一个要求,就像我必须在更新之前注释掉一个属性值,并用新值添加该属性。像 路径=c:\ 更新后应该是这样的 #路径=c:\ path=c:\my\u文件夹 有可能做到这一点吗?下面是我用来编辑属性文件的代码 Properties prop=new Properties(); String currentDirectary=System.getProperty("testDir"); String path=cu

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

路径=c:\

更新后应该是这样的

#路径=c:\
path=c:\my\u文件夹

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

        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);

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

下面的“一种黑客”如何:只需构建一个包含旧值的
注释
,并将其传递给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

无法使用标准库保存注释。您需要自己编写代码。一种更简单的方法可能是重命名旧文件,以便您可以比较与
diff
或类似文件所做的更改。您是否尝试注释的不是属性,而是值?