java - java.io.FileNotFoundException: src\main\resources\Report\testQuery.xlsx (系统找不到指定的路径) 在tomcat中部署文件后
问题描述
我正在运行一个 cron 调度程序,它将运行查询并导出到资源文件夹中的 excel 文件中。当我在 IDE 中运行程序时,它工作正常并且文件正在资源下创建,但是当我在 Tomcat 中部署代码时出现此错误“java.io.FileNotFoundException: src\main\resources\Report\testQuery.xlsx (该系统找不到指定的路径)”
IDE 的输出:启动已连接执行导出成功关闭
来自 Tomcat 的输出:
启动 Connected Executing java.io.FileNotFoundException: src\main\resources\Report\testQuery.xlsx(系统找不到指定的路径)
解决方案
将应用程序部署到 Tomcat 时,文件夹src\main\resources\Report不存在。构建项目时,已编译的类和资源被打包到 WAR 档案中。在运行时,您可以从 /resources 文件夹访问资源,但不能在那里写入。
您需要为生成的文件找到其他位置,以确保在部署到应用程序服务器时它可用于您的应用程序。
- 如果文件是临时文件,您可以使用
File.createTempFile
,在任何环境中使用都非常安全。 - 您可以使用应用程序的工作目录,无论它是什么。在您的 IDE 中,它将是您项目的根文件夹(这就是src\main\resources\Report\testQuery.xlsx起作用的原因),在 Tomcat 上它取决于服务器配置(CATALINA_BASE 环境变量)。您可以在应用程序启动时在那里创建一个/Report子目录。
推荐阅读
- html - 如何防止 2 列表格中的表格文本将其下方的单元格推到另一侧?
- angular6 - 如何检查innerformgroup状态即时角反应形式
- xml - Springboot Restful API XML 响应根元素显示为 List
- javascript - Puppeteer page.click(selector) 对 IFrame 没有响应
- javascript - JavaScript 输入值语法
- c# - 根据另一个属性的值动态更改序列化的属性名称
- php - 尝试在 Matomo 中运行资产等于数组时单元测试失败
- d3.js - 在 D3 中,如何在力有向图上同时支持 Pan&Zoom 和 Mouseover?
- reactjs - 将 OData 结果映射到组件中
- java - 从 2 开始打印素数到输入的数字并避免“n/2”逻辑