2013-06-13 151 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

感謝您的解釋 –