java.io.FileNotFoundException 使用 tomcat 时
java.io.FileNotFoundException when using tomcat
我有一个应用程序 运行 在本地主机上运行良好,但是当它部署在 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
上时我遇到了问题我用来读取文件的代码是:
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");
使用资源时,最好以这种方式访问它们。特别是如果您计划使用单个工件部署到任何地方,因为您的资源应该与您的工件打包在一起。