2015-12-22 46 views
1

下面的代碼返回路徑war文件夾(即/ ROOT /):Tomcat的JVM - 根文件夾參考

getServletContext().getRealPath("/"); 

我需要從這個角度去一個文件夾了,我怎麼去這樣做那?

我曾嘗試以下:

final String path = getServletContext().getRealPath("./"); 
    final String path2 = getServletContext().getRealPath("../"); 
    final String path3 = getServletContext().getRealPath(".../"); 

我需要那麼保存文件的根文件夾之外,但只有一個級別,所以每次我更新我的網站,它不會取代物理上傳ROOT文件夾內的文件,而只是觸摸網站文件。

謝謝

+1

您想將文件保存到Tomcat的'webapps'目錄?你認爲這真的是個好主意嗎? – Kayaman

+0

它不會被保存在那裏,它將被保存在域文件夾..我的文件夾結構是「域/ /folder_i_want_to_save_to」 – TejjD

+2

在任何情況下,這聽起來像一個壞主意。 – Kayaman

回答

-1

你必須在戰爭的位置使用文件的API。

File root = new File(getServletContext().getRealPath("./")); 
    String parent = root.getParent(); 

    String parentParent = new File(parent).getParent(); 
+0

不起作用.. – TejjD

0

我們甚至不知道你的WAR文件被解壓:Tomcat的可以在不解壓,它給你留下一個非文件系統路徑以及部署它們。

正如在評論中所討論的那樣,這樣做是不好的做法,您應該找出存儲數據的位置 - 例如:數據庫,外部存儲器,文件系統中的某處。然後,「只」爲這些文件提供單獨的下載選項 - 單獨或壓縮 - 通過您的Web應用程序。

0


您可以使用的另一個解決方案是到外部文件夾的符號鏈接。 你可以在你的項目的外面創建一個文件夾,讓我們來看看tomcat路徑中webapps文件夾的相同級別的例子。 我們將舉例說明上傳。

現在在您的部署腳本中(假設您有一個腳本),您可以輕鬆地創建從上傳文件夾到項目中文件夾的符號鏈接。 它將允許您從項目內部獲取文件,並且在重新部署時,文件不會被刪除。

例如:

ln -s /var/lib/tomcat6/uploads /var/lib/tomcat6/webapps/myWebApp/uploads 

上面的例子是我的tomcat6的發行版,但你可以改變您的設置工作路徑。

這個答案使用3個假設:

  1. 你的WAR文件解壓縮。
  2. 你有一個部署腳本,如果沒有,你可以很容易地創建一個bash腳本 這樣做。
  3. 您需要的解決方案是用於非分佈式設置(每個服務器都擁有自己的文件)。

Liron