2010-06-24 74 views
2

我有一些嵌入式Java代碼中,我試圖加載一個屬性文件位於同一文件夾中的JSP文件:JSP:的FileReader使用相對路徑拋出FileNotFoundException異常

Properties titles = new Properties(); 
titles.load(new FileReader("titles.txt")); 

上面的代碼拋出FileNotFoundException。

在這種情況下,究竟是如何引用「當前文件夾」?

+1

相關:http://stackoverflow.com/questions/2792870/java-cant-find-file-when-running-through-eclipse/2792939#2792939 – BalusC 2010-06-24 11:42:13

回答

1

通過使用加載類的類加載器,您可以輕鬆獲取文件。

getClass().getClassLoader().getResourceAsStream("titles.txt"); 

但是我不知道它是否會與JSP

工作,你也可以使用ServletContext.getResourceAsStream(""),但你必須給 web內容相對路徑。

+0

最後一個是不正確的。它只接受一個webcontent相對路徑。 – BalusC 2010-06-24 11:39:26

+0

謝謝你,這是我的意思,但它確實不明確 – Redlab 2010-06-24 11:51:37

4

兩件事情:

  1. JSP中不應該包含Java代碼。使用mvc框架(spring mvc,stripes等)作爲控制器,並僅將JSP用作視圖。這讓生活變得更容易
  2. 您不應該通過Web應用程序中的文件系統訪問資源文件,請使用類加載器訪問as suggested by redlab。問題是Web應用程序可能會或可能不會在文件系統上解壓縮,這取決於servlet容器

我看到的主要問題是您無法對路徑進行任何有效的假設是,因爲你不知道你的編譯JSP是

所以:創建一個控制器類,把屬性文件相同的文件夾,並通過getClass().getClassLoader().getResourceAsStream("titles.txt");

+0

是的,我也在想,這可能是一個問題,JSP編譯和資源不會被找到。 而你當然完全正確的點1! – Redlab 2010-06-24 11:01:31

3

FileReader需要絕對路徑從控制器類加載它,或者相對於運行java的地方。但對於Web應用程序,通常通過/etc/init.d/tomcat startup完成,不能依賴於當前的目錄。

你可以通過調用servletContext.getRealPath("/relative/path/to/file.txt")

你可以通過調用request.getRequestURL()獲取URL的相對部分獲得應用程序的絕對路徑。

也就是說,你最好在一個servlet中使用這個代碼,而不是一個JSP - JSP是一種視圖技術,邏輯不應該放在它裏面。

+0

FileReader需要絕對路徑'。不,它不。這裏的問題是執行JSP時的當前目錄不是由JSP本身的任何屬性決定的,所以相對於JSP定位文件是毫無意義的。 – EJP 2010-06-25 00:31:02

+0

@EJP看到更新 – Bozho 2010-06-25 06:43:39

相關問題