spring boot 读取jar的classpath文件

Java 2019-12-13 阅读 212 评论 0

使用spring boot 读取 resources 目录下的静态文件,比如图片、js、css等,可以用 org.springframework.core.io.Resource 。

ResourceLoader读取资源

@Autowired
private ResourceLoader resourceLoader;
...
Resource fileResource = resourceLoader.getResource("classpath:templates/images/logo.png");    // 指定文件路径

ClassPathResource

Resource resource = new ClassPathResource("classpath:templates/images/logo.png");


使用注意

当打包成 jar,调用 resource 的读取内容时候,需要注意,不能使用 resource.getFile() 方法,比如需要读取 logo.png 图片,返回给客户端。

final Resource fileResource = new ClassPathResource("classpath:templates/images/logo.png");
BufferedImage bi = ImageIO.read(fileResource.getFile());    // 应当使用getInputStream()
OutputStream out = response.getOutputStream();
ImageIO.write(bi, "png", out);
out.close();

在测试的时候,可能一切正常,但是打包成 jar 会报 FileNotFoundException 异常。

java.io.FileNotFoundException: class path resource [templates/images/logo.png] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/develop/test/build/libs/test.jar!/BOOT-INF/classes!/templates/images/logo.png

应当使用 resource.getInputStream(),切记!!

最后更新 2019-12-13