将属性写入文件时筛选出注释

时间:2013-05-16 17:01:22

标签: java properties

我正在使用java.util.Properties#store()方法将我的属性保存到文件中:

os = new BufferedOutputStream(new FileOutputStream(propertiesFile));
properties.store(os, null);

此方法的默认实现始终将注释写为当前timestamp的第一行:

#Thu May 16 12:55:36 EDT 2013

我的应用程序中不需要此行为,因为我需要跟踪属性文件中的所有更改。是否有可能以某种方式从属性文件中过滤此注释行(以及所有其他注释行)?

我对“动态”解决方案特别感兴趣,之后没有对文件进行后期处理。

3 个答案:

答案 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类