2011-03-17 60 views
1

我使用PropertiesConfiguration來加載和存儲屬性值。PropertiesConfiguration - 在屬性值中使用「/」

如果我在屬性值中使用字符'/',它將被保存爲'\ /'。你能幫我省下'/'而不是'\ /'嗎?我在這裏錯過了什麼嗎?

PropertiesConfiguration databaseProperties; 
databaseProperties = new PropertiesConfiguration("Properties.properties"); 
databaseProperties.setProperty("PropName", "jdbc:sqlserver://"); 
databaseProperties.save(); 

救了我的屬性文件之後爲

PropName = jdbc:sqlserver:\/\/

感謝,

回答

2

/退讓是爲了滿足性能要求的文件格式值。這種格式描述在the JavaDoc of Properties.load(Reader)

如果這是而不是你想要什麼,那麼你真的不想要一個屬性文件,但一些其他(可能類似)的格式。

2

這是因爲「/」必須轉義才能回讀到系統中。您可能會打開備份文件並隱藏這些值,但下次嘗試打開時會導致問題。

1

你確定它看起來並不像

PropName=jdbc\:sqlserver\:// 

,你鍵入從內存中這個問題? /不屬於屬性文件中的轉義字符,但是:是。

也許你沒有使用java.util.Properties文件的事實與它有很大關係。 PropertiesConfiguration的編寫者可能會稍微修改加載/存儲以創建屬性文件,這些文件在作爲shell腳本讀入時能更好地處理/字符。

某些系統在屬性文件中讀取「源shell腳本」以提供與java程序屬性文件的設置兼容的面向shell的命令行工具。如果是這種情況,那麼轉義/將防止它在shell腳本的某些上下文中被作爲目錄分隔符進行插入。

1

關於Joachim的回答,我查看了他鏈接到的javadoc,甚至還查看了其中鏈接到Java語言參考的鏈接,而且我無處看到屬性值中的斜槓('/')將需要逃脫。當我使用java.util.Properties和它的方法load()和save()時,在屬性值中的斜槓不會被轉義。對於這個問題,如果在第一個屬性鍵分隔符之後使用冒號(':'),那麼它們都不是。

對於我自己的使用,我更新了我的maven dependency以使用commons-configuration版本2.0-SNAPSHOT,並且這似乎是固定的。查看了代碼(PropertiesConfiguration和PropertiesConfigurationLayout)後,如果它是commons-lang依賴項中的bug或怪癖,我不會感到驚訝。 Commons-configuration 1.9使用commons-lang 2.6,但commons-configuration 2.0-SNAPSHOT使用commons-lang3。

2

我使用1.10版本的公共配置和正常工作:

<dependency> 
    <groupId>commons-configuration</groupId> 
    <artifactId>commons-configuration</artifactId>   
    <version>1.10</version> 
</dependency> 
相關問題