Java 属性反斜杠

2022-08-31 16:08:32

我正在使用Java属性来读取属性文件。一切正常,但“属性”以静默方式删除反斜杠。

(即)

original: c:\sdjf\slkdfj.jpg

after: c:sdjfslkdfj.jpg

如何使属性不这样做?

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

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


答案 1

正是 Properties.load() 导致了您所看到的问题,因为反斜杠用于特殊目的。

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

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

String propertyFileContents = readPropertyFileContents();

Properties properties = new Properties();
properties.load(new StringReader(propertyFileContents.replace("\\", "\\\\")));

答案 2

使用双反斜杠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

更新归功于以下@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