Spring MVC - 无法在webapp / resources /创建文件

时间:2014-07-22 05:45:48

标签: java spring file

我想在' webapp / resources /'

创建文件

我使用了以下代码。

String filepath = "classpath:webapp/resources/" + filename +".json";
File file = new File(filepath);

if (!file.exists()) {

            file.createNewFile();
}

但发生了错误。

ex)没有这样的文件或目录

我认为文件路径不正确。

我不知道' / webapp / resources /'的真实路径。

2 个答案:

答案 0 :(得分:3)

您必须从Servlet上下文中获取物理路径,如

   //add HttpServletRequest request in spring controller as parameter
   String phyPath = request.getSession().getServletContext().getRealPath("/");

   String filepath = phyPath + "resources/" + filename +".json";
   File file = new File(filepath);
   if (!file.exists()) {
            file.createNewFile();
   }

在使用它之前要小心,因为在项目重新部署后,它将被刷新。   其他更好的选择是创建 CDN(内容交付网络),如服务器,并在那里存储文件。

答案 1 :(得分:1)

java.io.Fileclasspath:前缀一无所知。它将profided文件路径直接传递给OS系统功能。并且文件路径是逐字处理的。所以你得到错误,因为没有路径为classpath:webapp/resources/blah-blab.json的文件。

您的一个选择是使用getRealPath。但这不可移植,取决于您的应用程序的部署方式以及使用的应用程序服务器。在某些情况下,部署为war的应用程序未解包,也可能将应用程序解压缩到临时文件夹,该文件夹在应用程序服务器重新引导之间清除。通常,此行为是特定于应用程序服务器的,不应依赖它。