我有一个 Spring Boot 应用程序。包含此文件:
resources/metrics/telefonica/Metrics.xlsx
并在代码中:
@Value(value = "classpath:/metrics/telefonica/Metrics.xlsx")
private Resource telefonicaMetricsTemplate;
..
Workbook wb =
WorkbookFactory.create
(telefonicaMetricsTemplate.getInputStream());
但是我收到了这个错误:
Caused by: java.io.FileNotFoundException: class path resource [metrics/telefonica/Metrics.xlsx] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/Users/lopes/Documents/workspace-sts-3.9.0.RELEASE/telefonicaUtils/target/telefonicaUtils-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/metrics/telefonica/Metrics.xlsx
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:217)
我也尝试了
Resource telefonicaMetricsTemplate = new ClassPathResource("/metrics/telefonica/Metrics.xlsx");
,结果相同
我正在运行该应用程序。从命令行如下:
java -jar target/telefonicaUtils-0.0.1-SNAPSHOT.jar
我正在运行该应用程序。来自 Eclipse,它工作正常
由于您对资源路径进行硬编码,因此不需要任何依赖项注入。只需将您的资源初始化为
ClassPathResource
:
private Resource telefonicaMetricsTemplate = new ClassPathResource("/metrics/telefonica/Metrics.xlsx");
您是否尝试将
classpath:...
替换为 file:...
并指定绝对路径?
此外,我知道有一个用于处理 Microsoft 文档的 Apache API。您可以将它与 Spring Boot 应用程序一起使用并制作您自己的
Resource
bean:https://poi.apache.org/
使用示例:https://www.concretepage.com/apache-api/read-write-and-update-xlsx-using-poi-in-java
它在 Eclipe 中工作,因为 Eclipse 可以查看资源文件夹中的文件。 但是,如果“src/main/resources”文件夹中的文件夹不在 jar 中或者不在类路径中(即:您的文件夹“/metrics”位于 jar 旁边),则当您抛出它时,jvm 无法找到它在命令行中。