2014-02-06 60 views
1

UPDATE:事實證明,在進行某些測試時,我沒有在IDE中正確設置類路徑。下面的代碼片段正常工作。這不再是一個問題。從JAR類路徑中讀取配置文件,並在JAR中默認使用

我想設置一些屬性/配置文件中的文件,將被部署在JAR中。

我希望用戶能夠提供自己的屬性/配置文件,它將覆蓋JAR中使用的屬性/配置文件,因此只有在用戶提供的文件不存在時纔會使用JAR中的文件。

我正在使用Class.getResource(路徑),它應該能夠找到相對和絕對(帶有前導斜槓)文件。

給出的JAR內的以下文件層次:

<jar-file>/SomeClass.class 
<jar-file>/conf/config-file.txt 

,並在

<some-classpath-folder>/conf/config-file.txt 

一個可選的文件我試圖做類似下面的代碼段,所以,只有當該文件是沒有在類路徑的絕對文件夾conf中找到,它將從JAR中的相對conf文件夾加載:

找到相對文件(來自JAR內),但類路徑中的絕對文件不是。

調用System.getProperty(「java.class.path」)顯示<一些-類路徑文件夾>文件夾,所以它看起來像類路徑設置正確,並在<一些-類路徑文件夾然而,這個文件>未找到/conf/config-file.txt。

有沒有辦法知道在搜索文件時掃描了哪些文件夾?或者對這裏出了什麼問題有任何建議?

TIA

回答

1

如果僅僅依靠你在類路徑層次的憐憫,如何在程序運行等,這可能工作類路徑的資源,但它並不完全是你的控制範圍之內。

IMO最好檢查一個明確定義的路徑,例如,通過像-Dconfig=/path/to/config這樣的系統屬性,像用戶家中的文件這樣的已知位置或屬性API。

+0

我打算給文件的唯一名稱,以便不應該是一個問題國際海事組織。我試圖保持外部配置到最低限度,這將用於Servlet過濾器,所以我想避免user.home等我將更新與更多的細節問題。謝謝。 – isapir

+0

@Igal如果這是在一個Web應用程序中,並且您希望具有用戶可配置選項,而無需修改Web應用程序,則仍應使用外部文件進行其他配置,IMO。或者JNDI /等等。 –

+0

我會研究一下JNDI,但是請看我在這個問題上的更新,在我看來,它應該是一個簡單的解決方案,如果我能夠得到它的工作。謝謝。 – isapir