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

时间:2010-06-03 23:57:37

标签: java spring-mvc

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

我可以使用request.getContextPath()

获取我的应用程序的根目录

但是

如何获取应用程序的相对路径,以便它可以独立于应用程序文件夹的位置在任何计算机上运行?

C:/folder/folder/MYAPPLICATIONROOTFOLDER

2 个答案:

答案 0 :(得分:7)

你想这样做。

首先,您需要获取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权限问题。

答案 1 :(得分:1)

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

如果我将文件foo.xml与com / stackoverflow / example中的类放在一起,那么我可以使用

从该包中的对象中找到资源。

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

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