我的 springboot 应用程序的资源目录中有一个文件 merge.json,该应用程序在 docker 中运行。
'jar -tf app.jar' 在结果中显示 BOOT-INF/classes/merge.json。
在代码中我尝试将其读为:
@Autowired
private ResourceLoader resourceLoader;
....
....
Resource resource = this.resourceLoader.getResource("classpath:merge.json");
File file = resource.getFile();
Files.readString(file.toPath());
但它给出了错误:
java.io.FileNotFoundException:类路径资源 [merge.json] 无法解析为绝对文件路径,因为它不驻留在文件系统中:jar:nested:/../../app.jar/!BOOT-INF/classes/!/merge.json
我在这里遗漏了什么?
当您的 Spring Boot 应用从 JAR 文件运行时,资源(例如)
merge.json
会打包在 JAR 中,而不是作为文件系统上的单独文件。这就是调用resource.getFile()
不起作用的原因,因为它试图在系统上查找文件,但在本例中该文件不存在。要从 JAR 内部读取文件,您应该使用 InputStream: