2011-05-19 58 views
1

我想使用getSystemResource訪問來自servlet的文件。這些文件駐留在項目本身和硬盤上。對於項目中的文件,我用:使用getSystemResource訪問servlet中的文件

ServletContext ctx = getServletContext(); 
    InputStream is = ctx.getResourceAsStream("/testing.txt"); 

它的工作原理,如果我把這些文件放在文件夾build/web,但是當我清理並生成項目中的所有文件都將被刪除。我應該在哪裏放置文件?

對於項目之外的文件,我使用的文件對象:

File file = new File("c://tmp//testing.txt"); 
InputStream is= new FileInputStream(file); 

這是一個好的做法呢?

+1

路徑中不需要雙正斜槓。新的文件(「c:/tmp/testing.txt」)就足夠了。 – 2011-05-19 13:33:10

+0

@Matt Ball,好的,對於你的建議thanx。 – palAlaa 2011-05-19 13:44:22

+0

「你」是一個美索不達米亞的城市。你可能打算說「你的」?請儘量寫出適當的英文。這不是disney.com或東西:) – BalusC 2011-05-19 13:52:17

回答

1

這些文件不應該被刪除,除非您在應用程序仍在運行時在展開的WAR中自己創建它們。然後,在重新部署WAR時,這些文件確實會被刪除,因爲它們不包含在原始WAR中。

通常的做法是將這些文件存儲在固定的路徑之外的webapp上下文中。你絕對不應該爲此使用tmp/temp文件夾。該文件夾有資格定期由底層平臺清理。使用例如/var/webapp/upload。正確記錄,以便serveradmin能夠事先創建它。如有必要,可以通過一些web.xml參數進行配置。

或者當環境不允許創建文件夾和/或寫入磁盤時,最後的最佳方法是將這些文件存儲在SQL數據庫中。

+0

是的,我手動創建的文件。實際上,我不喜歡保存在db中的大文件,在我正在處理的情況下。我會將文件名保存在數據庫中,並將文件保存在硬盤中,因爲我有很多種文件,jpg,pdf,txt和其他文件,然後使用第二種方法訪問資源,這是一種好方法嗎? – palAlaa 2011-05-19 13:43:30

+1

是的,你可以這樣做。在DB中存儲名字非常好。它允許快速搜索,並且還可以存儲內容類型和其他元數據。 – BalusC 2011-05-19 13:53:00