2010-06-03 85 views
4

我想創建一個xml文件並將其存儲在我的spring Mvc Web應用程序的文件夾中。創建一個文件並存儲在Java Web應用程序文件夾中

我可以讓我的應用程序的根與request.getContextPath()

如何獲得應用程序的相對路徑所以它會在任何機器上工作indipendently由應用程序的文件夾的位置?

喜歡C:/folder/folder/MYAPPLICATIONROOTFOLDER

回答

6

你想這樣做。

首先,您需要獲取ServletContext。我不知道這是如何在Spring MVC中完成的,但它在某處。

然後,你可以這樣做:

ServletContext ctx = getServletContextFromSpringSomehow(); 
String path = ctx.getRealPath("/folder/filename.txt"); 
FileWriter fw = new FileWriter(path); 

的這裏關鍵是的ServletContext.getRealPath。它從Web應用程序中爲您提供資源的本地文件系統路徑。注意你在這裏使用「/」,因爲它是一個URL,而不是文件名。容器會給你一個有效的文件名作爲回報。請注意,這隻適用於您的容器爆炸WAR或部署爆炸WAR的情況。如果WAR不爆炸,您將從容器中取回空。

另請注意,這將適用於不存在的文件。容器不檢查文件的實際存在。但是它將由你自己創建任何缺失的中間目錄等。

最後,當然,即使你得到一個文件路徑回來,並不意味着你實際上可以寫入該路徑。這是容器範圍之外的操作系統權限問題。

+3

不要忘記:如果重新部署webapp,所有保存的文件將會丟失。如果你想要更長久的存儲空間,將它存儲在web應用程序之外,即使需要存儲在數據庫中。 – BalusC 2010-06-04 02:22:44

+1

@Autowired ServletContext上下文; 會給你上下文訪問 – normalUser 2015-04-03 09:50:08

1

一種解決方案是用在JAR/WAR的clases要捆綁所述XML,然後使用的getResourceAsStream()利用類加載器以找到該文件。

如果我把文件foo.xml與COM /計算器/例子類,我會再與

InputStream is = MyClass.getResourceAsStream("com/stackoverflow/example");

定位從對象的資源在束,從這裏處理與文件一個XML解析器或任何你想要做的讀取文件。

相關問題