我想创建一个xml文件并存储在我的Spring Mvc Web应用程序的文件夹中。
我可以使用request.getContextPath()
但是
如何获取应用程序的相对路径,以便它可以独立于应用程序文件夹的位置在任何计算机上运行?
赞C:/folder/folder/MYAPPLICATIONROOTFOLDER
答案 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解析器处理文件或者您想要读取文件的其他任何内容。