我想創建一個xml文件並將其存儲在我的spring Mvc Web應用程序的文件夾中。創建一個文件並存儲在Java Web應用程序文件夾中
我可以讓我的應用程序的根與request.getContextPath()
但
如何獲得應用程序的相對路徑所以它會在任何機器上工作indipendently由應用程序的文件夾的位置?
喜歡C:/folder/folder/MYAPPLICATIONROOTFOLDER
我想創建一個xml文件並將其存儲在我的spring Mvc Web應用程序的文件夾中。創建一個文件並存儲在Java Web應用程序文件夾中
我可以讓我的應用程序的根與request.getContextPath()
但
如何獲得應用程序的相對路徑所以它會在任何機器上工作indipendently由應用程序的文件夾的位置?
喜歡C:/folder/folder/MYAPPLICATIONROOTFOLDER
你想這樣做。
首先,您需要獲取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不爆炸,您將從容器中取回空。
另請注意,這將適用於不存在的文件。容器不檢查文件的實際存在。但是它將由你自己創建任何缺失的中間目錄等。
最後,當然,即使你得到一個文件路徑回來,並不意味着你實際上可以寫入該路徑。這是容器範圍之外的操作系統權限問題。
一種解決方案是用在JAR/WAR的clases要捆綁所述XML,然後使用的getResourceAsStream()利用類加載器以找到該文件。
如果我把文件foo.xml與COM /計算器/例子類,我會再與
InputStream is = MyClass.getResourceAsStream("com/stackoverflow/example");
定位從對象的資源在束,從這裏處理與文件一個XML解析器或任何你想要做的讀取文件。
不要忘記:如果重新部署webapp,所有保存的文件將會丟失。如果你想要更長久的存儲空間,將它存儲在web應用程序之外,即使需要存儲在數據庫中。 – BalusC 2010-06-04 02:22:44
@Autowired ServletContext上下文; 會給你上下文訪問 – normalUser 2015-04-03 09:50:08