gpt4 book ai didi

使用 tomcat 时出现 java.io.FileNotFoundException

转载 作者:行者123 更新时间:2023-11-28 23:09:25 25 4
gpt4 key购买 nike

我有一个应用程序在本地主机上运行良好,但在部署到 tomcat 上时遇到问题

我用来读取文件的代码是:

File jasperFile = new File(getClass().getClassLoader().getResource("reports/Header.jasper").getFile());

我在 catalina 中遇到这个错误:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: file:/usr/local/apache-tomcat9/webapps/com.peek.facture.server/WEB-INF/lib/facture.server-1.0.0-SNAPSHOT.jar!/reports/Header.jasper

触发我的是“!”在 jar 名称的末尾,它来自哪里?

我还尝试下载 jar,解压,我的 Header.jasper 正确地位于 resources/reports/文件夹中

最佳答案

当您在本地运行独立物理 文件时Header.jasper存在(您可以在浏览 reports 目录时实际看到它)。

但是,当您部署到 tomcat 服务器时,该独立物理 文件将不再存在。相反,如果您正确设置构建,当您打开 jar ( facture.server-1.0.0-SNAPSHOT.jar ) 时,应该有一个名为 reports 的目录在其中包含文件 Header.jasper在该目录中。

因此,当您尝试通过 getClass().getClassLoader().getResource(...).getFile() 获取资源时您实际上是在尝试访问一个独立的物理 文件。相反,您需要以 InputStream 的形式获取资源然后使用 if 从那里...

InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("reports/Header.jasper");

使用资源时,最好以这种方式访问​​它们。特别是如果您计划使用单个工件部署到任何地方,因为您的资源应该与您的工件打包在一起。

关于使用 tomcat 时出现 java.io.FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59427393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com