使用java设置属性文件
问题描述:
我有一个带有一些文本字段的Swing框,它在属性文件中显示当前值。一旦我在文本字段中修改这些属性,它应该保存回属性文件。我有的属性是数据库连接参数。我的连接参数如下使用java设置属性文件
driver--org.postgresql.Driver
url--jdbc:postgresql://localhost/bank
user--postgres
password--aaa
但是,当它更新,在URL字段,在那里曾经有一个“:”,它增加了一个“\” 像URL2=jdbc\:postgresql\://localhost/bank
。我怎样才能避免这种情况?我在设置属性文件之前尝试打印内容,然后确定。 我在设置属性之前打印了字符串,这里是对的;
org.postgresql.Driver **jdbc:postgresql://localhost/bank**postgres**aaa
有人能帮我吗。 由于提前
public static void update(String driver,String url, String user,String password) throws SecurityException, IOException{
System.out.println(driver+" **"+url+"**"+user+"**"+password);
FileInputStream in = new FileInputStream("evaluator.properties");
Properties props = new Properties();
props.load(in);
in.close();
FileOutputStream out = new FileOutputStream("evaluator.properties");
props.setProperty("Driver2", driver);
props.setProperty("URL2", url);
props.setProperty("Login2", user);
props.setProperty("Password2", password);
props.store(out, null);
out.close();
}
答
Properties.store()逃避某些字符:
键和元素字符#,=和:前面都有反斜杠被写入,以确保它们被正确地加载。
一旦你将它们读回Properties.load()
,它们就会转为非转义状态,以便获得原始值。
答
根据java docs对于 存储API,某些字符在写入输出流时将被转义。
所以,冒号“:”是越来越转换为“\:”
我希望的解决办法是写的OutputStream之前转义字符。 转换回属性实例时,转义字符将被视为需要处理。
+0
感谢您的解释 –
没关系,它会一切工作;但是,这很烦人 – fge
这是属性API的工作原理,它需要转义某些字符。当你读回属性(通过'Properties'类)时,它们看起来如何? – MadProgrammer
正如@MadProgrammer所提到的,如果你在props.load(in);行之后直接添加一个'props.list(System.err);',你可以验证重载后的属性看起来好看吗 –