我想在' webapp / resources /'
创建文件我使用了以下代码。
String filepath = "classpath:webapp/resources/" + filename +".json";
File file = new File(filepath);
if (!file.exists()) {
file.createNewFile();
}
但发生了错误。
ex)没有这样的文件或目录
我认为文件路径不正确。
我不知道' / webapp / resources /'的真实路径。
答案 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.File
对classpath:
前缀一无所知。它将profided文件路径直接传递给OS系统功能。并且文件路径是逐字处理的。所以你得到错误,因为没有路径为classpath:webapp/resources/blah-blab.json
的文件。
您的一个选择是使用getRealPath。但这不可移植,取决于您的应用程序的部署方式以及使用的应用程序服务器。在某些情况下,部署为war的应用程序未解包,也可能将应用程序解压缩到临时文件夹,该文件夹在应用程序服务器重新引导之间清除。通常,此行为是特定于应用程序服务器的,不应依赖它。