2013-06-13 106 views
2

我有一个带有一些文本字段的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(); 
} 
+1

没关系,它会一切工作;但是,这很烦人 – fge

+0

这是属性API的工作原理,它需要转义某些字符。当你读回属性(通过'Properties'类)时,它们看起来如何? – MadProgrammer

+0

正如@MadProgrammer所提到的,如果你在props.load(in);行之后直接添加一个'props.list(System.err);',你可以验证重载后的属性看起来好看吗 –

回答

3

Properties.store()逃避某些字符:

键和元素字符#,=和:前面都有反斜杠被写入,以确保它们被正确地加载。

一旦你将它们读回Properties.load(),它们就会转为非转义状态,以便获得原始值。

+0

+1仅用于挖掘文档 – MadProgrammer

+0

您的打字速度比我快...... :-p – Shinchan

+0

@Shinchan它主要取决于您找到文档的速度有多快;-) –

1

根据java docs对于 存储API,某些字符在写入输出流时将被转义。

所以,冒号“:”是越来越转换为“\:”

我希望的解决办法是写的OutputStream之前转义字符。 转换回属性实例时,转义字符将被视为需要处理。

+0

感谢您的解释 –