【问题标题】:Java Properties file. Problems with setProperty() methodJava 属性文件。 setProperty() 方法的问题
【发布时间】:2012-09-15 15:35:25
【问题描述】:

我尝试使用Properties#setProperty() 方法覆盖Properties 文件中的现有属性值。

但是我得到了一个额外的反斜杠...

例如,我在属性文件中有以下条目:

#url to server
url=http://192.22.222.222

当我尝试用新值 http://192.33.333.333 覆盖值 http://192.22.222.222 时,我得到以下结果: http\://192.33.333.333

即第一次反弹是不必要的。我

问题出在哪里?

【问题讨论】:

  • 如果您想再次通过 Java 读取属性文件,那么不会像@Jon Skeet 在他的回答中提到的那样有问题,但是如果该文件必须由其他程序读取,那么您可以在Linux中使用“sed”(sed's/\\//g' )删除文件中的那些反斜杠,但我不知道Windows相当于sed。

标签: java properties properties-file


【解决方案1】:

没有问题。再次加载文件时,您不会在属性值中看到反斜杠。转义代码选择转义所有冒号(可能还有所有等号),无论是否严格要求。 (当它们不是密钥的一部分时,您没有必须转义它们,但这样做可能会使代码更简单。)

只要您始终使用Properties.load 方法之一加载代码,您应该不会发现任何问题。

【讨论】:

  • 如果文件也被其他(非 Java)程序使用,您可能仍希望去掉多余的斜杠。
  • @Thomas:我不会在其他非 Java 程序中使用属性文件。如果我想让互操作更容易,我会使用 XML。
  • 很公平,我可能会做类似的事情。我的观点更多的是,可能有一个很好的理由来摆脱斜线——一个是如果你想从 Java 外部重用属性文件。那么你最初的“没有问题”可能不再成立。
【解决方案2】:

来自the doc

键包含行中以 第一个非空白字符,直到但不包括 第一个未转义的 '='':' 或除一行以外的空白字符 终结者。所有这些关键终止字符都可能包含在 通过使用前面的反斜杠字符转义它们的键;为了 例如,

\:\=

将是两个字符的键 ":="

【讨论】:

    【解决方案3】:

    Java 属性在写入属性值时会转义一些字符,如冒号。 见Properties#store

    这被认为是一项功能,因为 Properties 格式允许冒号作为键/值分隔符(请参阅 Properties#load 方法的源代码)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多