我想将URL存储在属性文件中。这是URL:
jdbc\:sqlserver\://dummydata\\SHARED
在用Java编程时,我显然需要转义反斜杠。所以我的代码最终看起来像这样
properties.setProperty("db", "jdbc\\:sqlserver\\://dummydata\\\\SHARED");
此问题是属性文件正在保存字符串URL,并包括用于转义的反斜杠,这是一个错误的URL。我希望Java能够解释用于转义的反斜杠,以便仅保存正确的URL。有没有办法做到这一点?
答案 0 :(得分:3)
您正确的认为,带有:
的属性值需要转义.properties
文本文件中的冒号,但是您不是直接写该文本文件。
您正在使用Properties
将值赋予setProperty()
对象,并可能使用store()
和{{1将其值写入文本文件 }}方法将根据需要转义值。
您应该为store()
提供所需的值,而忘记文本文件的编码规则。 Properties
将处理所有需要的编码。由于您要提供的值为Properties
,因此您要编写字符串文字 jdbc:sqlserver://dummydata\SHARED
示例
"jdbc:sqlserver://dummydata\\SHARED"
输出
String db = "jdbc:sqlserver://dummydata\\SHARED";
System.out.println(db); // To see actual string value
Properties properties = new Properties();
properties.setProperty("db", db);
try (FileWriter out = new FileWriter("test.properties")) {
properties.store(out, null);
}
test.properties的内容
jdbc:sqlserver://dummydata\SHARED
如您所见,#Tue Jun 11 11:54:24 EDT 2019
db=jdbc\:sqlserver\://dummydata\\SHARED
方法为您转义了store()
和:
。
如果将属性另存为XML文件,则无需转义任何内容,\
不会。
示例
Properties
test.xml的内容
try (FileOutputStream out = new FileOutputStream("test.xml")) {
properties.storeToXML(out, null);
}
答案 1 :(得分:0)
Properties.store()
会转义反斜线,因此无法解决。我想我的第一个问题是为什么这是个问题?您是否要使用Properties.load()
以外的其他方式读取文件。如果不是这样,您就不必担心,因为加载功能将删除转义符。
properties.load(file);
System.out.println(properties.get("db"));
// output: jdbc\:sqlserver\://dummydata\\SHARED
顺便说一句,您确定URL正确吗?您不应该将其存储为properties.setProperty("jdbc:sqlserver://dummydata\SHARED")
吗?
答案 2 :(得分:-1)
在load
的{{3}}中,它表示以下内容:
该方法不会在无效的转义字符之前将反斜杠字符\视为错误;反斜杠默默地掉了下来。例如,在Java字符串中,序列“ \ z”将导致编译时错误。相反,此方法会静默删除反斜杠。因此,此方法将两个字符序列“ \ b”等同于单个字符“ b”。
这意味着两个反斜杠将被视为一个反斜杠,因为它不是有效的转义序列。加载该字符串应该可以正常工作:
C:\\path\\to\\file