2011-03-17 56 views
1

我使用PropertiesConfiguration来加载和存储属性值。PropertiesConfiguration - 在属性值中使用“/”

如果我在属性值中使用字符'/',它将被保存为'\ /'。你能帮我省下'/'而不是'\ /'吗?我在这里错过了什么吗?

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

救了我的属性文件之后为

PropName = jdbc:sqlserver:\/\/

感谢,

回答

2

/退让是为了满足性能要求的文件格式值。这种格式描述在the JavaDoc of Properties.load(Reader)

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

2

这是因为“/”必须转义才能回读到系统中。您可能会打开备份文件并隐藏这些值,但下次尝试打开时会导致问题。

1

你确定它看起来并不像

PropName=jdbc\:sqlserver\:// 

,你键入从内存中这个问题? /不属于属性文件中的转义字符,但是:是。

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

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

1

关于Joachim的回答,我查看了他链接到的javadoc,甚至还查看了其中链接到Java语言参考的链接,而且我无处看到属性值中的斜杠('/')将需要逃脱。当我使用java.util.Properties和它的方法load()和save()时,在属性值中的斜杠不会被转义。对于这个问题,如果在第一个属性键分隔符之后使用冒号(':'),那么它们都不是。

对于我自己的使用,我更新了我的maven dependency以使用commons-configuration版本2.0-SNAPSHOT,并且这似乎是固定的。查看了代码(PropertiesConfiguration和PropertiesConfigurationLayout)后,如果它是commons-lang依赖项中的bug或怪癖,我不会感到惊讶。 Commons-configuration 1.9使用commons-lang 2.6,但commons-configuration 2.0-SNAPSHOT使用commons-lang3。

2

我使用1.10版本的公共配置和正常工作:

<dependency> 
    <groupId>commons-configuration</groupId> 
    <artifactId>commons-configuration</artifactId>   
    <version>1.10</version> 
</dependency> 
相关问题