我在哪裏戰爭具有如下所示的目錄結構的應用程序工作:故障排除ClassLoader.getResourceAsStream()或Class.getResourceAsStream()
ear/war/modules/configuration/gsrc/<java packages start here>
不過,我要動態讀取住在這裏一個文件:
/ear/war/modules/configuration/some/other/dir/somefile.csv
我已經嘗試了正常ClassLoader.getResourceAsStream()和Class.getResourceAsStream()的多少排列,試圖獲得一個句柄資源所有的拿出空如:
ClassLoader.getResourceAsStream("/modules/configuration/some/other/dir/somefile.csv")
ClassLoader.getResourceAsStream("/configuration/some/other/dir/somefile.csv")
ClassLoader.getResourceAsStream("/some/other/dir/somefile.csv")
Class.getResourceAsStream("../some/other/dir/somefile.csv")
Class.getResourceAsStream("../../some/other/dir/somefile.csv")
Class.getResourceAsStream("../../../some/other/dir/somefile.csv")
我的假設是我使用的是一個classloader,它的根作用域是代碼所在的gsrc目錄。解決這個問題的適當方法是什麼?
例如,我希望能打印出類似ClassLoader.rootDirectory()的東西來找出類加載器的根目錄是什麼。然後我可以打印出這個類加載程序的根目錄,它的父級(s)等。
運行時在本地是jetty,但在所有其他區域是websphere。
正在使用什麼服務器(Tomcat,Websphere等)? –
當地碼頭。在開發,測試,舞臺,prod websphere – Russ
我們不知道你的WAR如何從這個結構組裝。解壓縮您的WAR文件。如果CSV文件不在'WEB-INF/classes'下,或者不在'WEB-INF/lib'的檔案中,那麼任何'ClassLoader'都可能不可見。如果它被捆綁在WAR的其他地方,那麼你將能夠通過'ServletContext'訪問文件。 – McDowell