[英]can I load resource from classpath if set to any directory?
我想以此加載資源:
InputStream iStream = Config.class.getResourceAsStream("autopublisherpath.cfg");
因此,我設置了CLASSPATH使其起作用。 這是我的目錄層次結構:
- autopublisher
.classes
.lib
.resources
如果我將%AUTOPUBLISHER_HOME%\\ resources \\ config添加到我的類路徑中,則無法獲取資源。 否則,如果將.cfg文件放在類中並添加%AUTOPUBLISHER_HOME%\\ classes,則資源將正確加載。 類dir除了autopublisherpath.cfg外不包含其他任何內容。
最終我想打電話給:
java com.test.Something
什么地方正在加載資源。 問題是我希望用戶修改此配置文件,因此我不將其包含在jar包裝中。
我不能正確理解CLASSPATH嗎?
謝謝
使用getResourceAsStream
時要注意的一件事是要檢索的資源名稱的格式。 默認情況下,如果未指定路徑,例如“ autopublisherpath.cfg”,則類加載器將期望所指定的資源與在其上執行getResourcesAsStream
方法的Class處於同一包中。 可以在JVM文檔中找到getResourceAsStream的原因是 :
modified_package_name/name
在您的特定示例中,如果Config
類位於com.test.config包中,則“ autopublisherpath.cfg”資源名稱將轉換為“ /com/test/config/autopublisherpath.cfg”(包中的句點)替換為'/'字符)。 因此,與原始項目層次結構保持一致,您需要將文件放入以下位置:
autopublisher/resources/config/com/test/config
在其中將autopublisher/resources/config
添加為應用程序執行類路徑的一部分。
如果要在類路徑中添加特定的配置目錄,並希望文件位於該目錄的根目錄中,則需要在文件名前加上'/'字符,以指定資源在類路徑的根包中。
InputStream iStream = Config.class.getResourceAsStream("/autopublisherpath.cfg");
使用此代碼,您應該能夠將resource/config
目錄添加到類路徑並按預期讀取文件。
附帶說明一下, getResourceAsStream
方法使用執行資源的類的類加載器(在本例中為Config)加載資源。 除非您的應用程序使用多個類加載器,否則您可以使用this.getClass().getResourceAsStream(...)
從任何類實例中執行相同的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.