Spring Boot - 使用 ResourceLoader 读取文本文件

新手上路,请多包涵

我正在尝试使用 Spring 资源加载器读取文本文件,如下所示:

 Resource resource  = resourceLoader.getResource("classpath:\\static\\Sample.txt");

该文件位于我的 Spring boot 项目中: 在此处输入图像描述

在 eclipse 中运行应用程序时它工作正常,但是当我打包应用程序然后使用 java –jar 运行它时,我得到文件未找到异常:

 java.io.FileNotFoundException: class path resource [static/Sample.txt] cannot be resolved to absolute file path because it does not reside in the
 file system: jar:file:/C:/workspace-test/XXX/target/XXX-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static/Sample.txt

我解压了样本所在的 Jar 文件:XXX-0.0.1-SNAPSHOT\BOOT-INF\classes\static\Sample.txt

有人能帮助我吗 ?

提前致谢!

原文由 Greg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 871
2 个回答

我检查了你的代码。如果你想从 Spring Boot JAR 中的类路径加载文件,那么你必须使用 resource.getInputStream() 而不是 resource.getFile() 。如果你尝试使用 resource.getFile() 你会收到一个错误,因为 Spring 试图访问文件系统路径,但它不能访问你的 JAR 中的路径。

详情如下:

https://smarterco.de/java-load-file-classpath-spring-boot/

原文由 Gipple Lake 发布,翻译遵循 CC BY-SA 4.0 许可协议

请尝试 resourceLoader.getResource("classpath:static/Sample.txt");

使用此代码运行时使用 java -jar XXXX.jar

在此处输入图像描述

- - - 更新 - - -

完成代码后,问题是您尝试通过 FileInputStream 读取文件,但实际上它在 jar 文件中。

但实际上你得到了 org.springframework.core.io.Resource 这意味着你得到了 InputStream,所以你可以像 new BufferedReader(new InputStreamReader(resource.getInputStream())).readLine();

原文由 Liping Huang 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题