删除属性文件java中的注释

时间:2011-05-19 12:31:08

标签: java

当我更新属性文件时,注释也会沿着数据更新。有没有任何可能的方法来删除注释或更新数据而不发表评论。

这里我每次将日期时间戳附加为注释

时更新文件4次
#Thu May 19 17:53:42 GMT+05:30 2011
Key_1=DSA_1024
#Thu May 19 17:53:43 GMT+05:30 2011
Key_2=DSA_1024
#Thu May 19 17:53:43 GMT+05:30 2011
Key_3=DSA_1024
#Thu May 19 17:53:44 GMT+05:30 2011
Key_4=DSA_1024

  Properties prop=new Properties();
            String currentDirectary=System.getProperty("user.dir");
            String path=currentDirectary+"/Resource/Key.Properties";
            FileOutputStream out=new FileOutputStream(path,true);
            prop.setProperty("keyName","DSA_1024");
            prop.store(out, null);

4 个答案:

答案 0 :(得分:2)

我曾经不得不这样做,因为属性文件的使用者无法处理属性。 store方法生成的注释定义明确,因此很容易跳过它:

Writer stringOut = new StringWriter();
properties.store(stringOut, null);
String string = stringOut.toString();
String sep = System.getProperty("line.separator");
out.write(string.substring(string.indexOf(sep) + sep.length()));

答案 1 :(得分:1)

来自properties.store()的JavaDocs

  

如果comments参数不为null,则首先将ASCII#字符,注释字符串和行分隔符写入输出流。因此,评论可以作为识别评论。

     

接下来,始终会写入注释行,其中包含ASCII#字符,当前日期和时间(就像当前时间的Date的toString方法生成的那样),以及Writer生成的行分隔符。

我能想到的唯一选择是编写yourOutputStream实现来删除注释。 (或者只是学会和他们一起生活:))

答案 2 :(得分:1)

以上是使用正确编码的hack的改进。

FileOutputStream out = new FileOutputStream(filename);
ByteArrayOutputStream arrayOut = new ByteArrayOutputStream();
props.store(arrayOut, null);
String string = new String(arrayOut.toByteArray(), "8859_1");
String sep = System.getProperty("line.separator");
String content = string.substring(string.indexOf(sep) + sep.length());
out.write(content.getBytes("8859_1"));

答案 3 :(得分:0)

在groovy中,我写了这个以完全删除属性中的注释。

String writeProperties(Properties properties) {
    def writer = new StringWriter()
    properties.each { k, v ->
         writer.write("${k}=${v}${System.lineSeparator()}")
    }
    writer.toString()
}

这应该很容易转换为常规java。