Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java web应用程序文件夹中创建文件并存储_Java_Spring Mvc - Fatal编程技术网

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

在Java web应用程序文件夹中创建文件并存储,java,spring-mvc,Java,Spring Mvc,我想创建一个xml文件并将其存储在SpringMVCWeb应用程序中的一个文件夹中 我可以通过request.getContextPath() 但是 如何获取应用程序的相对路径,使其能够根据应用程序文件夹的位置在任何机器上独立工作 与C:/folder/folder/MYAPPLICATIONROOTFOLDER类似,一种解决方案是将XML与JAR/WAR中的类绑定在一起,然后使用getResourceAsStream()利用类加载器定位文件 如果我将foo.xml文件和类放在com/stack

我想创建一个xml文件并将其存储在SpringMVCWeb应用程序中的一个文件夹中

我可以通过
request.getContextPath()

但是

如何获取应用程序的相对路径,使其能够根据应用程序文件夹的位置在任何机器上独立工作


C:/folder/folder/MYAPPLICATIONROOTFOLDER

类似,一种解决方案是将XML与JAR/WAR中的类绑定在一起,然后使用getResourceAsStream()利用类加载器定位文件

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


InputStream=MyClass.getResourceAsStream(“com/stackoverflow/example”);

然后从这里开始,使用XML解析器或任何您想要执行的操作来读取文件。

您想要执行此操作

首先,您需要获取ServletContext。我不知道在SpringMVC中是如何做到这一点的,但它就在某个地方

然后你可以做:

ServletContext ctx = getServletContextFromSpringSomehow();
String path = ctx.getRealPath("/folder/filename.txt");
FileWriter fw = new FileWriter(path);
这里的关键是ServletContext.getRealPath。它为您提供webapp中资源的本地文件系统路径。注意,您在这里使用“/”,因为它是一个URL,而不是一个文件名。容器将返回一个有效的文件名。注意,这仅在容器爆炸战争或部署爆炸战争时有效。如果战争没有爆发,您将从容器中返回空值

还要注意,这将适用于不存在的文件。容器不检查文件的实际存在。但实际创建任何缺少的中间目录等将取决于您


最后,当然,即使您获得了一个文件路径,也不意味着您可以实际写入该路径。这是一个超出容器范围的操作系统权限问题。

不要忘记:如果重新部署webapp,所有保存的文件都将丢失。如果您想要更持久的存储,请将其存储在webapp之外,即使需要存储在数据库中。@Autowired ServletContext;将为您提供上下文访问权限