2

我有一个带有一些文本字段的 Swing Frame,它显示属性文件中的当前值。一旦我在文本字段中修改了这些属性,它应该被保存回属性文件。我拥有的属性是数据库连接参数。我的连接参数如下

driver--org.postgresql.Driver
url--jdbc:postgresql://localhost/bank
user--postgres
password--aaa

但是当它更新时,在 url 字段中,只要有一个 ':',它就会添加一个 '\' like 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();
}
4

2 回答 2

3

Properties.store()转义某些字符:

键和元素字符 #、!、= 和 : 前面带有反斜杠,以确保它们被正确加载。

一旦你用 读回它们Properties.load(),它们就不会转义,这样你就可以得到原始值。

于 2013-06-13T06:48:41.587 回答
1

根据store API 的java 文档,一些字符在写入输出流时会被转义。

因此,冒号“:”被转换为“\:”

我希望解决方案是在写入输出流之前转义字符。在转换回属性实例时,将根据需要处理转义字符。

于 2013-06-13T06:54:03.820 回答