2015-10-06 48 views
0
private static void createPropertiesFile() { 
    Properties prop = new Properties(); 
    OutputStream output = null; 

    try { 

     output = new FileOutputStream(
       "c://properties//xyz.properties"); 

     // set the properties value 
     prop.setProperty("URL", hostName); 

     prop.store(output, null); 

    } catch (IOException io) { 
     io.printStackTrace(); 
    } finally { 
     if (output != null) { 
      try { 
       output.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

    } 
} 

屬性文件中的示例數據如下所示。如何忽略屬性文件中出現的反斜槓,如:and =

#Tue Oct 06 15:26:55 IST 2015 
URL=jdbc\:sqlserver\://abc.xyz.net 

我的理解是,任何事情之前先「=」作爲重點和任何處理過的第一後「=」作爲視爲價值。在這個過程中,當遇到像:和=這樣的字符時,它們會被反斜槓'\'轉義。

可當遇到有人請從屬性出現在首位幫助我如何刪除或限制「\」文件:和=

+0

爲什麼?應該使用'Properties'來輕鬆地從文件系統讀寫。如果你想使用輸出文件做別的事情,不要使用'Properties'。 – Manu

+0

我需要在這種情況下使用鍵(即URL)xyz.properties,但有沒有辦法如何處理這與屬性,因爲我的要求是去與屬性文件。 – Raghottam

+0

你是什麼意思?你想要第二個程序(不是Java)來讀取文件並使用鍵值對? – Manu

回答

1

這是由設計。屬性文件將把=和:作爲鍵/值分隔符。

爲了明確哪些部分是關鍵字,哪些是'='和':'字符的值,如果包含在任何部分中,則必須轉義。

考慮以下幾點:

Key: somepassword 
Value: Xj993a== 

屬性文件看起來像:

somepassword=Xj993a== 

不幸的是,這裏是關鍵,價值在何處?關鍵可能是:

  • somepassword與價值Xj993a ==
  • somepassword = Xj993a與價值=
  • somepassword = Xj993a ==空值

這樣做的分析將是曖昧最好。現在,如果我們逃避「=」字符:

somepassword=Xj993a\=\= 

現在這是顯式地清除哪個是關鍵,這就是價值。

這也可以很容易地被寫爲:

somepassword:Xj993a\=\= 

請閱讀java.util.Properties.load(java.io.Reader)文檔有關允許和解析的屬性文件語義逃逸的更多信息。

+0

感謝戴夫提供的信息。 – Raghottam