2013-12-13 101 views
0

我在哪裏戰爭具有如下所示的目錄結構的應用程序工作:故障排除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。

+0

正在使用什麼服務器(Tomcat,Websphere等)? –

+0

當地碼頭。在開發,測試,舞臺,prod websphere – Russ

+1

我們不知道你的WAR如何從這個結構組裝。解壓縮您的WAR文件。如果CSV文件不在'WEB-INF/classes'下,或者不在'WEB-INF/lib'的檔案中,那麼任何'ClassLoader'都可能不可見。如果它被捆綁在WAR的其他地方,那麼你將能夠通過'ServletContext'訪問文件。 – McDowell

回答

0

我的Eclipse項目的結構如下:

C:\工作區\項目名的\ src \ COM \我\包\資源\ myfile.properties

因此,實際加載該文件,我這樣做:

getClass().getResourceAsStream("/com/my/package/resources/myfile.properties") 

我希望這個例子可以幫助你。

0

要麼把在WEB-INF文件和訪問它使用

getServletContext().getResourceAsStream("/WEB-INF/somefile.csv"); 

一個servlet或任何其放在文件系統和訪問它要麼與Java文件API或Apache commons-io