PropertiesConfiguration - 在Property值中使用“/”

时间:2011-03-17 16:38:22

标签: java properties

我正在使用PropertiesConfiguration来加载和存储属性值。

如果我在Property值中使用字符'/',则会将其保存为'\ /'。你能帮助我保存'/'而不是'\ /'吗?我在这里错过了什么吗?

PropertiesConfiguration databaseProperties;
databaseProperties = new PropertiesConfiguration("Properties.properties");
databaseProperties.setProperty("PropName", "jdbc:sqlserver://");
databaseProperties.save();

保存我的属性文件后,其值为

PropName = jdbc:sqlserver:\/\/

谢谢,

5 个答案:

答案 0 :(得分:2)

/的转义是为了满足属性文件格式的要求。此格式在the JavaDoc of Properties.load(Reader)

中描述

如果那是你想要什么,那么你真的不想要一个属性文件,而是一些其他(可能类似的)格式。

答案 1 :(得分:2)

这是因为必须转义“/”才能将其读回系统。您可以重新打开文件并取消浏览这些值,但下次尝试打开时会导致问题。

答案 2 :(得分:2)

我使用1.10版本的commons-configuration并且工作正常:

<dependency>
    <groupId>commons-configuration</groupId>
    <artifactId>commons-configuration</artifactId>          
    <version>1.10</version>
</dependency>

答案 3 :(得分:1)

你确定它看起来不像

PropName=jdbc\:sqlserver\://

你从内存中输入了这个问题? /并非属性文件中的转义字符,但:是。

也许您没有使用java.util.Properties文件的事实与它有很大关系。 PropertiesConfiguration的编写者可能会稍微修改加载/存储以创建属性文件,这些文件在作为shell脚本读入时更好地处理/字符。

某些系统将属性文件读入“源shell脚本”,以提供与java程序属性文件的设置兼容的面向shell的命令行工具。如果是这种情况,那么转义/会阻止它在shell脚本的某些上下文中作为目录分隔符进行交互。

答案 4 :(得分:1)

关于Joachim的回答,我查看了他链接的javadoc,我甚至按照其中发布的链接查看了Java语言参考,我在任何地方都看不到属性值中的斜杠('/')会在哪里需要逃脱。当我使用java.util.Properties及其方法load()和save()时,属性值中的斜杠不会被转义。就此而言,如果在第一个属性键分隔符之后使用,则冒号(':')也不是。

对于我自己的用途,我更新了我的maven依赖项以使用commons-configuration版本2.0-SNAPSHOT,这似乎是修复的。看过代码(PropertiesConfiguration和PropertiesConfigurationLayout)之后,如果它是一个bug或者在commons-lang依赖项中的怪癖,我就不会感到惊讶。 Commons-configuration 1.9使用commons-lang 2.6,但是commons-configuration 2.0-SNAPSHOT使用commons-lang3。