我正在使用PropertiesConfiguration来加载和存储属性值。
如果我在Property值中使用字符'/',则会将其保存为'\ /'。你能帮助我保存'/'而不是'\ /'吗?我在这里错过了什么吗?
PropertiesConfiguration databaseProperties;
databaseProperties = new PropertiesConfiguration("Properties.properties");
databaseProperties.setProperty("PropName", "jdbc:sqlserver://");
databaseProperties.save();
保存我的属性文件后,其值为
PropName = jdbc:sqlserver:\/\/
谢谢,
答案 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。