Java Properties反斜杠

Jav*_*eat 49 java properties

我正在使用Java Properties来读取属性文件.一切都工作正常,但属性默默地丢弃反斜杠.

(即)

original: c:\sdjf\slkdfj.jpg

after: c:sdjfslkdfj.jpg
Run Code Online (Sandbox Code Playgroud)

如何让属性不这样做?

我正在使用代码 prop.getProperty(key)

我从文件中获取属性,我想避免添加双反斜杠

Bal*_*a R 50

导致出现问题的是Properties.load(),因为反斜杠用于特殊目的.

保存键元素对的所有数据的逻辑行可以通过使用反斜杠字符\来转义行终止符序列,在几个相邻的自然行中展开.

如果您无法使用CoolBeans的建议,那么您可以做的是事先将属性文件读取到字符串并用双反斜杠替换反斜杠然后将其提供给Properties.load()

String propertyFileContents = readPropertyFileContents();

Properties properties = new Properties();
properties.load(new StringReader(propertyFileContents.replace("\\", "\\\\")));
Run Code Online (Sandbox Code Playgroud)

  • 多行属性值将不再被识别。请参阅我的帖子以获取解决方案。 (2认同)

Coo*_*ans 18

使用双反斜杠 c:\\sdjf\\slkdfj.jpg

Properties props = new Properties();
props.setProperty("test", "C:\\dev\\sdk\\test.dat");
System.out.println(props.getProperty("test"));    // prints C:\dev\sdk\test.dat
Run Code Online (Sandbox Code Playgroud)

信用更新@ewh以下.显然,Windows识别正斜杠.所以,我猜你可以让你的用户用正斜杠写它,如果你之后需要反斜杠,你可以做一个替换.我在下面测试了这个片段,它运行正常.

Properties props = new Properties();
props.setProperty("test", "C:/dev/sdk/test.dat");
System.out.println(props.getProperty("test"));   // prints C:/dev/sdk/test.dat
Run Code Online (Sandbox Code Playgroud)

  • 在Windows系统上,你并没有失败.实际上,您可以在Windows系统上的路径名中使用正斜杠.我通常在java属性文件中执行此操作以避免混淆反斜杠. (2认同)

use*_*421 10

使用斜杠.Java中从不需要在文件名中使用反斜杠.


fro*_*ble 6

如果你真的需要,将加载(像不是一个文件路径属性)属性文件反斜杠\u005c每一个反斜杠字符.

反斜杠在属性文件中特别处理,如@unhillbilly提供的文档中所示.

@EJP:如果你想在一个属性文件中存储一个NTLM登录ID,其中格式DOMAIN\USERNAME带有反斜杠,那么肯定需要 反斜杠.这种类型的属性不是文件名,因此正斜杠不起作用.

编辑:@Max Nanasy:从上面提到的文件(java.util.Properties load javadoc)(强调我的)

该方法不会将无效转义字符之前的反斜杠字符'\'视为错误; 反斜杠被默默地删除.例如,在Java字符串中,序列"\ z"将导致编译时错误.相反,这种方法会默默地删除反斜杠.因此,此方法将两个字符序列"\ b"视为等同于单个字符"b"

对我来说,我总是遇到属性文件中反斜杠的问题(即使使用双反斜杠'\\'),除非我指定了unicode.