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

我想创建一个xml文件并存储在我的Spring Mvc Web应用程序中的一个文件夹中。

我可以通过request.getContextPath()获取应用程序的根目录

我如何获得应用程序的相对路径,以便它可以在应用程序文件夹的位置独立地在任何计算机上工作?

C:/folder/folder/MYAPPLICATIONROOTFOLDER

你想这样做。

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

然后你可以这样做:

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

这里的关键是ServletContext.getRealPath。 它为您提供了webapp中资源的本地文件系统路径。 观察者在这里使用“/”,因为它是一个URL,而不是文件名。 容器将为您提供有效的文件名作为回报。 请注意,这仅适用于容器爆炸WAR或部署爆炸WAR的情况。 如果WAR未爆炸,您将从容器中获得空值。

另请注意,这将适用于不存在的文件。 容器不检查文件的实际存在。 但实际上你可以创建任何缺少的中间目录等等。

最后,当然,即使您获得文件路径,也不意味着您实际上可以写入该路径。 这是容器范围之外的OS权限问题。

一种解决方案是将XML与JAR / WAR中的clases捆绑在一起,然后使用getResourceAsStream()来利用ClassLoader来定位文件。

如果我将文件foo.xml与com / stackoverflow / example中的类放在一起,那么我可以从该包中的对象中找到资源

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

并从此处使用XML解析器处理文件或您想要读取文件的任何其他内容。