弹簧引导 - 使用资源加载器读取文本文件

2022-09-02 19:24:23

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

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

该文件位于我的Spring引导项目中:enter image description here

在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

有人可以帮我吗?

提前致谢!


答案 1

我已经检查了您的代码。如果要从 Spring Boot JAR 中的类路径加载文件,则必须使用 而不是 .如果您尝试使用,您将收到错误,因为Spring尝试访问文件系统路径,但它无法访问JAR中的路径。resource.getInputStream()resource.getFile()resource.getFile()

详情如下:

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


答案 2

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

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

enter image description here

------更新------

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

但实际上,你得到的“所以”意味着你得到了输入流,所以你可以像这样做。org.springframework.core.io.Resourcenew BufferedReader(new InputStreamReader(resource.getInputStream())).readLine();


推荐