2015-04-23 37 views
2

我有一個war文件打包並部署。下面是結構:在單獨部署或入侵的war文件中查找資源(.txt文件)

EAR 
-WAR 
--input.txt 
--META-INF 
--WEB-INF 
---classes 
(and so on) 

我試圖從WEB-INF/classes文件夾中的類(比如abc.xyz.Myclass)的一個讀input.txt中。這裏是我的嘗試:

this.getClass().getClassLoader().getResourceAsStream("../../input.txt"); 

Thread.currentThread().getContextClassLoader().getResourceAsStream("../../input.txt"); 

我試着像 「../input.txt」 或 「/input.txt」 或只是 「input.txt中」 幾個路徑通過附加一個調試器。但每次我得到NULL作爲返回值(意味着它無法找到該文件)。

在戰爭中訪問該文件的正確方法是什麼?無論戰爭是單獨部署還是打包在耳邊?請幫忙。

回答

3

這是因爲input.txt不在類路徑之中,其中一個典型爲WEB-INF/classes/,並且無法使用類加載器訪問位於類路徑之外的資源。

可選地,如果代碼可以訪問HttpServletRequest對象:

request.getServletContext().getResourceAsStream("/input.txt"); 

當然有其他的方法來獲得ServletContext實例。

5

使用getResource()時,資源需要位於類路徑上。因此,您需要將input.txt放在classes目錄下的某處。

+0

沒有任何方法來加載不在classpath上的資源嗎? – keenUser

+0

不與'getResource()'。有沒有理由不能在類路徑中? – Kayaman

+0

沒什麼大的原因。戰爭已經與客戶打包在一起。我想在現有的戰爭結構中不做任何改變。 – keenUser