如何逃离冒号 (:)在属性文件中?
2022-09-01 23:15:03
我正在使用属性文件来存储应用程序的配置值。在其中一个实例中,我必须将值存储为 .当我这样做时,冒号用反斜杠转义,导致值显示在属性文件中。xxx:yyy:zzz
\
xxx\:yyy\:zzz
我知道冒号是Java类的标准分隔符。但是,我仍然需要保存没有反斜杠的值。:
Properties
\
关于如何处理这个问题的任何建议?
我正在使用属性文件来存储应用程序的配置值。在其中一个实例中,我必须将值存储为 .当我这样做时,冒号用反斜杠转义,导致值显示在属性文件中。xxx:yyy:zzz
\
xxx\:yyy\:zzz
我知道冒号是Java类的标准分隔符。但是,我仍然需要保存没有反斜杠的值。:
Properties
\
关于如何处理这个问题的任何建议?
将属性放入对象中,并使用方法保存它。该方法将执行所需的任何转义。Java文档说:Properties
store(...)
"...对于键,所有空格字符都使用前面的 \ 字符书写。对于元素,前导空格字符(但不是嵌入或尾随空格字符)使用前面的 \ 字符写入。键和元素字符 #、!、= 和 : 使用前面的反斜杠编写,以确保正确加载它们。
如果您手动创建/写入文件,则只需手动转义字符。
相反,如果您希望文件包含未转义的冒号字符,那么您就不走运了。此类文件格式不正确,可能无法使用这些方法正确加载。如果您沿着这条路走下去,则需要实现自己的自定义加载和/或存储方法。Properties.load(...)
我遇到了同样的问题。正斜杠也会被 中的方法转义。/
store()
Properties
我通过创建自己的类(扩展 )并注释掉对方法中的调用来解决此问题。CustomProperties
java.util.Properties
saveConvert()
customStore0()
这是我的课程:CustomProperties
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
public class CustomProperties extends Properties {
private static final long serialVersionUID = 1L;
@Override
public void store(OutputStream out, String comments) throws IOException {
customStore0(new BufferedWriter(new OutputStreamWriter(out, "8859_1")),
comments, true);
}
//Override to stop '/' or ':' chars from being replaced by not called
//saveConvert(key, true, escUnicode)
private void customStore0(BufferedWriter bw, String comments, boolean escUnicode)
throws IOException {
bw.write("#" + new Date().toString());
bw.newLine();
synchronized (this) {
for (Enumeration e = keys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
String val = (String) get(key);
// Commented out to stop '/' or ':' chars being replaced
//key = saveConvert(key, true, escUnicode);
//val = saveConvert(val, false, escUnicode);
bw.write(key + "=" + val);
bw.newLine();
}
}
bw.flush();
}
}