【问题标题】:java.io.FileNotFoundException: src\main\resources\Report\testQuery.xlsx (The system cannot find the path specified) after deploying file in tomcatjava.io.FileNotFoundException: src\main\resources\Report\testQuery.xlsx (系统找不到指定的路径) 在tomcat中部署文件后
【发布时间】:2019-12-29 13:34:56
【问题描述】:

我正在运行一个 cron 调度程序,它将运行查询并导出到资源文件夹中的 excel 文件中。当我在 IDE 中运行程序时,它工作正常并且文件正在资源下创建,但是当我在 Tomcat 中部署代码时出现此错误“java.io.FileNotFoundException: src\main\resources\Report\testQuery.xlsx (系统找不到指定的路径)”

IDE 的输出: 开始 连接的 执行 导出成功 关闭

Tomcat 的输出:

开始 连接的 执行 java.io.FileNotFoundException: src\main\resources\Report\testQuery.xlsx(系统找不到指定的路径)

【问题讨论】:

  • xlsxWorkbook.write(new FileOutputStream("src/main/resources/Report/testQuery.xlsx"));
  • 不要硬编码文件路径,而是在属性文件中定义它,并在您执行导出的服务或组件中绑定相应的属性。
  • 如果您使用 springframework,您可以使用 ResourceLoader 或 ResourceUtils 从资源路径获取文件对象。路径字符串将为“classpath:/Report/testQuery.xlsx”

标签: java spring spring-boot


【解决方案1】:
当您将应用程序部署到 Tomcat 时,

文件夹 src\main\resources\Report 不存在。构建项目时,已编译的类和资源被打包到 WAR 档案中。在运行时,您可以访问 /resources 文件夹中的资源,但不能在那里写入。

您需要为生成的文件找到其他位置,以确保在部署到应用程序服务器时它可用于您的应用程序。

  • 如果文件是临时文件,您可以使用File.createTempFile,在任何环境中使用都非常安全。
  • 您可以使用应用程序的工作目录,无论它是什么。在您的 IDE 中,它将是您项目的根文件夹(这就是 src\main\resources\Report\testQuery.xlsx 起作用的原因),在 Tomcat 上,它取决于服务器配置(CATALINA_BASE 环境变量)。您可以在应用程序启动时在那里创建一个 /Report 子目录。

【讨论】:

    猜你喜欢
    • 2014-01-11
    • 1970-01-01
    • 2020-02-03
    • 2014-12-19
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    相关资源
    最近更新 更多