我使用的是属性文件来存储我的应用程序的配置价值。 在实例中的一个,我得的值存储为xxx:yyy:zzz
。 当我这样做,结肠逃脱反斜杠\
导致的价值表现为xxx\:yyy\:zzz
的属性文件。
据我所知,冒号:
是一个标准的分隔符Properties
的Java类。 不过,我仍然需要保存的值,而不反斜杠\
。
如何处理这有什么建议?
我使用的是属性文件来存储我的应用程序的配置价值。 在实例中的一个,我得的值存储为xxx:yyy:zzz
。 当我这样做,结肠逃脱反斜杠\
导致的价值表现为xxx\:yyy\:zzz
的属性文件。
据我所知,冒号:
是一个标准的分隔符Properties
的Java类。 不过,我仍然需要保存的值,而不反斜杠\
。
如何处理这有什么建议?
把属性到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();
}
}
我们一前两天打了这个问题。 我们在操纵现有的属性文件与网址做为值。
这是有风险的,但如果你的财产值少于40个字符,那么你可以用它代替“存储”的“名单”的方法:
http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#list(java.io.PrintWriter)
我们有一个快速浏览一下JDK代码和黑客攻击了商店的自定义实现,对于我们的目的,工作原理:
public void store(Properties props, String propertyFilePath) throws FileNotFoundException {
PrintWriter pw = new PrintWriter(propertyFilePath);
for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
String key = (String) e.nextElement();
pw.println(key + "=" + props.getProperty(key));
}
pw.close();
}
如果使用属性文件的XML变种(使用loadFromXML
和storeToXML
)这不应该是一个问题。
它的简单,只需使用撇号 '在那里如:
取而代之的是(情况1)
File file= new File("f:\\properties\\gog\\esave\\apple");
prop.setProperty("basedir",flie.toString());
使用这个(情况2)
File file= new File("f':'\\properties\\gog\\esave\\apple");
prop.setProperty("basedir",flie.toString());
输出将被
情况1:BASEDIR = F:\性能\高格\ esave \苹果
情况2:BASEDIR = F:\性能\高格\ esave \苹果
我希望这能帮到您