String Boot 获取资源文件

问题描述 投票:0回答:3

我有一个 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,它工作正常

java spring spring-mvc spring-boot file-io
3个回答
2
投票

由于您对资源路径进行硬编码,因此不需要任何依赖项注入。只需将您的资源初始化为

ClassPathResource
:

private Resource telefonicaMetricsTemplate = new ClassPathResource("/metrics/telefonica/Metrics.xlsx");

0
投票

您是否尝试将

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


0
投票

它在 Eclipe 中工作,因为 Eclipse 可以查看资源文件夹中的文件。 但是,如果“src/main/resources”文件夹中的文件夹不在 jar 中或者不在类路径中(即:您的文件夹“/metrics”位于 jar 旁边),则当您抛出它时,jvm 无法找到它在命令行中。

© www.soinside.com 2019 - 2024. All rights reserved.