ind*_*iws 18 java escaping properties key-value colon
我正在使用属性文件来存储我的应用程序的配置值.在其中一个实例中,我必须将值存储为
xxx:yyy:zzz.当我这样做时,冒号用反斜杠转义,\导致值显示xxx\:yyy\:zzz在属性文件中.
我知道冒号:是PropertiesJava类的标准分隔符.但是我仍然需要保存值而不使用反斜杠\.
有关如何处理这个的任何建议?
Ste*_*n C 17
将属性放入Properties对象并使用store(...)方法保存.该方法将执行所需的任何转义.在Java文档说:
"...对于密钥,所有空格字符都使用前面的\字符写入.对于元素,前导空格字符,但不是嵌入或尾随空格字符,使用前面的\字符写入.键和元素字符#, !,=和:用前面的反斜杠写成,以确保它们正确加载."
如果要手动创建/写入文件,则只需手动转义字符.
相反,如果您希望文件包含未转义的冒号字符,那么您就不走运了.这样的文件格式不正确,可能无法使用这些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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27552 次 |
| 最近记录: |