我使用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);
答案 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