2010-01-12 81 views
1

我正在使用jboss,eclipse和svn。我必須將文件存儲在我的測試文件夾中:test/create.jsptest/data.txt。我想要做的是當我打電話給我的create.jsp它將更新我的data.txt。顯然,我希望我的data.txt保持在其他腳本正在嘗試從中讀取的位置。試圖更新src/web/prod文件夾中的文件(jsp)

我已經嘗試了幾十種將路徑放入File對象的新方法,但由於某種原因它在jboss war文件夾下創建了該文件。

嘗試:

ServletContext app = getServletContext(); 
String path1 = app.getRealPath("/"); 
File f = new File(path1); 
// AND 
File f = new File("../../data.txt"); 

回答

2

假設/test文件夾位於web內容,那麼你需要以下條件:

String absolutePath = getServletContext().getRealPath("/test/data.txt"); 
File file = new File(absolutePath); 

String webcontentRoot = getServletContext().getRealPath("/"); 
File file = new File(webcontentRoot, "test/data.txt"); 

你看到了嗎? Java IO只能識別本地磁盤文件系統路徑,而不是上下文之外的URL或路徑。 ServletContext#getRealPath()用於將相關網絡路徑轉換爲絕對本地磁盤文件系統路徑,後者又可用於常見的Java IO內容。你應該從來沒有在Java IO東西中使用相對路徑。您將依賴於當前的工作目錄,每個環境/情況可能有所不同。

也就是說,您通常不想將文件寫入web內容。無論何時重新部署WAR,它們都會丟失。而是在webapp外的其他地方創建一個固定的磁盤文件系統路徑,並利用它。或甚至更好,利用獨立的SQL數據庫:)

+0

absolutePath和webcontentRoot都指向一個位置,它的:「C:\ workspace \ infweb \ gen \ jboss \ jboss-4.2.2.GA \ server \ default \。\ deploy \ infweb.war \ test \ data.txt「,我真的希望它是」C:\ workspace \ infweb \ src \ web \ prod \ test.txt「可能我只是混淆了路徑而不是充分了解部署時發生的情況。 大聲笑,是的,如果它在我手中,我會用sql,我的生活會容易得多。 – Zoheir 2010-01-12 03:09:02

相關問題