我正在使用java.util.Properties#store()
方法将我的属性保存到文件中:
os = new BufferedOutputStream(new FileOutputStream(propertiesFile));
properties.store(os, null);
此方法的默认实现始终将注释写为当前timestamp
的第一行:
#Thu May 16 12:55:36 EDT 2013
我的应用程序中不需要此行为,因为我需要跟踪属性文件中的所有更改。是否有可能以某种方式从属性文件中过滤此注释行(以及所有其他注释行)?
我对“动态”解决方案特别感兴趣,之后没有对文件进行后期处理。
答案 0 :(得分:2)
是的,你可以:)。
首先,您可以扩展Properties
并覆盖store()
方法。但这种方式太复杂了。
你可以做得更好。检查store()
的源代码。它调用实际完成工作的私有方法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++;
}
}
现在,当您打包BufferedWriter
并致电FileOutputStream
时,您可以使用此自定义store()
:
props.store(new IgnoreFirstLineBufferedWriter(new OutputStreamWriter(new FileOutputStream("myprops.properties"))));
答案 1 :(得分:0)
此时间戳在属性上以私有方法打印,并且没有用于控制该行为的属性。如果要更改此行为,则可能需要子类化属性,覆盖存储方法并复制/粘贴store0方法的内容,以便不打印日期注释。
答案 2 :(得分:0)
使用storeToXML方法时不会打印日期。但属性将以XML格式存储( 否则,最好的方法是按照之前的说明扩展Properties类