创建一个文件并存储在Java Web应用程序文件夹中

问题描述:

我想创建一个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不爆炸,您将从容器中取回空。

另请注意,这将适用于不存在的文件。容器不检查文件的实际存在。但是它将由你自己创建任何缺失的中间目录等。

最后,当然,即使你得到一个文件路径回来,并不意味着你实际上可以写入该路径。这是容器范围之外的操作系统权限问题。

+3

不要忘记:如果重新部署webapp,所有保存的文件将会丢失。如果你想要更长久的存储空间,将它存储在web应用程序之外,即使需要存储在数据库中。 – BalusC 2010-06-04 02:22:44

+1

@Autowired ServletContext上下文; 会给你上下文访问 – normalUser 2015-04-03 09:50:08

一种解决方案是用在JAR/WAR的clases要捆绑所述XML,然后使用的getResourceAsStream()利用类加载器以找到该文件。

如果我把文件foo.xml与COM /计算器/例子类,我会再与

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

定位从对象的资源在束,从这里处理与文件一个XML解析器或任何你想要做的读取文件。