spring boot 读取jar的classpath文件
使用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(),切记!!