PropertiesConfiguration – 在Property值中使用“/”

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

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

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

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

  PropName = jdbc:sqlserver:\ / \ / 

谢谢,

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

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

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

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

  commons-configuration commons-configuration 1.10  

你确定它看起来不像

 PropName=jdbc\:sqlserver\:// 

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

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

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

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

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