2013-08-01 72 views
3

我有一個java類寫入/附加到現有的屬性文件。追加後,用雙反斜槓替換所有單個反斜槓,並在每個分號前放置單個反斜槓。屬性文件反斜槓和分號

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    response.setContentType("text/html"); 
    PrintWriter out= response.getWriter(); 
    String systemPath=request.getParameter("SYSTEMPATH"); 
    String deployPath = getServletConfig().getServletContext().getRealPath("/WEB-INF/DB.properties"); 
    InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/DB.properties"); 
    Properties prop = new Properties(); 
    prop.load(stream); 
    prop.setProperty("Workspace", systemPath); 
    File file = new File(deployPath); 
    FileOutputStream fileOut = new FileOutputStream(file); 
    prop.store(fileOut, "sample properties"); 
    fileOut.close(); 
} 

追加之前:

URL = JDBC:預言:瘦:@ // 192.168.1.22:1521/

工作區= d:\ RACHEL \ SW \防病毒

追加後:

URL = JDBC \ :ORACLE \:瘦\:@ // 192.168.1.22 \:1521/

工作區= d \:\\ \\ RACHEL SW \\殺毒

如何去除這些多餘的反斜線?

回答

3

屬性文件應該有額外的反斜槓開始。尤其是,如果沒有他們,最終可能會得到錯誤的數據,例如如果你有d:\foo\new這並不意味着你期望的。

反斜槓基本上是轉義屬性文件中敏感的字符。冒號是不必要的(因爲它們不在密鑰中),但它們也不會造成任何傷害。文本反斜槓加倍是完全有益的。

這記錄在Properties文檔中 - 特別是,請查看您要撥打的store()方法。

+0

任何解決方案?但是當我從屬性文件讀取這些值時,它會有額外的反斜槓禮? –

+0

@BobbyRachel:不,它不會。它們只是正確的轉義 - 當你使用'Properties.load()'時,它們將被非轉義地有效地轉換。問題是它*沒有額外的反斜槓開始 - 您需要修復創建原始屬性文件的任何內容。 –

2

屬性文件有their own format冒號反斜槓是屬性文件中的特殊字符。所以,他們必須逃脫。也看看Properties.load()文檔。

如果使用Properties閱讀文件,也不會有任何問題。但是,如果使用Property類編寫屬性文件,並使用其他方法讀取,則必須手動處理轉義。

+0

冒號和反斜槓不能*值被轉義...儘管反斜槓後面跟着有效的轉義序列。 –

0

可以檢索鍵,它的價值和檢查,並不會改變,但在屬性文件 這似乎看起來有多餘的斜線

0

我有同樣的問題,因爲我是對另一個問題計算器。我記得有這個代碼! 我希望它有幫助,至少它是java,但它確實逃避了屬性文件反斜槓和分號陷阱中的問題。

// load to store prop 
    @SuppressWarnings ("resource") 
    PrintWriter pw = new PrintWriter(configFile); 
    pw.println("#" + LocalDateTime.now()); 
    pw.println("hibernate.connection.username=" + prop.getProperty("hibernate.connection.username")); 
    pw.println("hibernate.connection.password=" + prop.getProperty("hibernate.connection.password")); 
    pw.println("hibernate.connection.url=" + prop.getProperty("hibernate.connection.url")); 
    pw.close();