问题
在Spring框架中,从jar中读文件问题:
java.io.FileNotFoundException: class path resource [xxxx/xxxx.jpg] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/Users/zhangyalin/Downloads/spring-xxx/xxx/target/xxx-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/xxxx/xxxx.jpg
原因
@Value("classpath:xxxx/xxxx.jpg")
Resource resourceFile;
我这里使用@Value注解的方式,进行文件读取的。但是,我使用如下API进行File对象获取的:
resourceFile.getFile();
这种方式是不能读取jar中的文件的,这种方式只能读OS文件系统的文件。
解决
只能使用Resource的读取流的方式,然后,转成临时文件,才可以得到File对象。
File tmpFile = null;
try {
tmpFile = File.createTempFile("jpgTemp", ".jpg");
FileUtils.copyInputStreamToFile(resourceFile.getInputStream(), tmpFile);
// 这里就获取到临时文件jpgTemp.jpg
} catch (IOException e) {
log.error("异常:", e);
} finally {
if (tmpFile != null) {
tmpFile.delete();
}
}