我正在使用 java.util.Properties#store()
方法将我的属性保存到文件中:
os = new BufferedOutputStream(new FileOutputStream(propertiesFile));
properties.store(os, null);
此方法的默认实现始终将注释写入带有当前时间戳
的第一行:
#Thu May 16 12:55:36 EDT 2013
我的应用程序不需要这种行为,因为我需要跟踪属性文件中的所有更改。是否可以以某种方式从属性文件中过滤此注释行(以及所有其他行)?
我对“即时”解决方案特别感兴趣,无需事后对文件进行后处理。
最佳答案
是的,你可以:)。
首先,您可以扩展 Properties
并重写 store()
方法。但这种方式太复杂了。
你可以做得更好。检查 store()
的源代码。它调用实际执行工作的私有(private)方法store()
。该方法调用
bw.write("#"+ new Date().toString());
一开始。你不想看到这一行。这意味着您必须实现自己的 BufferedWriter 来忽略第一个打印行。
public class IgnoreFirstLineBufferedWriter extends BufferedWriter {
private int lineCouner = 0;
// constructors - implement them yourself
@Override
public void write(String str) throws IOException {
if (lineCounter > 0) {
super.write(str);
}
lineCounter++;
}
}
现在,当您包装 FileOutputStream
并调用 store()
时,您可以使用这个自定义的 BufferedWriter
:
props.store(new IgnoreFirstLineBufferedWriter(new OutputStreamWriter(new FileOutputStream("myprops.properties"))));
关于java - 将属性写入文件时过滤掉注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16593357/