【问题标题】:Cannot be resolved to absolute file path because it does not reside in the file system无法解析为绝对文件路径,因为它不驻留在文件系统中
【发布时间】:2022-01-05 13:19:35
【问题描述】:

我的代码:

XWPFDocument doc = new XWPFDocument(OPCPackage.open(ResourceUtils.getFile("classpath:assets/OPTIONS_" + jubilar1.getJubiLanguage().toUpperCase() + ".docx")));

我已经尝试过使用 .getFile()、extractJarFileFromURL 或 resource.getInputStream() 来代替,但这一切都不起作用。当我打包我的项目并将其作为 jar 文件运行并尝试打开以下文件时,它总是返回以下消息。

错误:

java.io.FileNotFoundException:类路径资源 [assets/OPTIONS_DE. docx] 无法解析为绝对文件路径,因为它没有 驻留在文件系统中: jar:file:/home/tkf6y/IdeaProjects/hrapps/backend/target/backend-3.0.0.jar!/BOOT-INF/classes!/assets/OPTIONS_EN.docx

【问题讨论】:

  • 错误没有错。它不是java.util.File,因为它不是文件系统上的物理文件,它是 jar 的一部分。无论位置如何,您都可以使用InputStream(并且应该)阅读它。有一个OPCPackage.open 方法采用Inputstream
  • 不,这不是问题所在。不过,我现在已经解决了。我将代码行更改为以下内容:codeXWPFDocument doc = new XWPFDocument(OPCPackage.open(getClass().getResourceAsStream("/assets/OPTIONS_" + jubilar1.getJubiLanguage().toUpperCase() + ".docx") )); code 我删除了 ResourceUtils.getFile() 并改用 getClass().getResourceAsStream()。然后你也可以不用classpath:。
  • 所以是的,这就是问题所在,因为您现在按照我的建议使用InputStream。问题是(并且一直是)getFile 的东西。我建议做的是不要使用你现在拥有的,而是使用new ClassPathResource(your location).getInputStream()),它更容易,甚至使用ResourceLoader(你可以注入的Spring接口),然后使用你拥有的路径再次使用getInputStream()

标签: java spring-boot file jar


【解决方案1】:

所以是的,这是问题所在,因为您现在按照我的建议使用 InputStream。问题是(并且一直是)getFile 的东西。我建议做的是不要使用你现在拥有的东西,而是做一个新的 ClassPathResource(your location).getInputStream()) ,它更容易,甚至使用 ResourceLoader (你可以注入的 Spring 接口)然后使用你有的路径再次使用getInputStream()。 ——

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2022-07-22
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多