SpringBoot打成jar包后⽆法读取resources资源⽂件
在项⽬中做了⼀个⽀付功能, 需要引⼊第三⽅渠道的配置⽂件l⽤来初始化⽂件证书, 将配置⽂件 l 放到 resources 资源⽬录下。
本地开发环境下能正常读取该⽂件, 但是在 Linux 环境下将项⽬打包成jar后运⾏会出现如下异常:
java.io.FileNotFoundException: class path resource [l] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/ROOT/xxx.jar!/BOOT-INF/lib/xxx-2.1.jar!/l    at org.springframework.File(ResourceUtils.java:217)
at File(AbstractFileResolvingResource.java:154)
  ...
因为在本地开发环境下, l是真实存在于磁盘上的某个⽬录, 此时通过  new File(⽂件路径)  是可以正常读取的。
但是在Linux下打包成jar后, 实际上l是存在于jar⾥⾯的资源⽂件, 在磁盘上是没有真实路径存在的, 所以通过⽂件读取⽂件读取⽅式会
报  java.io.FileNotFoundException
对此, Java API提供了⼀些⽅法, 可以通过I/O流的⽅式先获取这个⽂件流, 再将这个⽂件流写⼊到⼀个真实存在的指定磁盘路径, 这样我们就可以通过  new File() 读取⽂件的⽅式访问了.
金子涵家境
ApplicationHome applicationHome = new ApplicationHome(CcbImpl.class);
//项⽬打包成jar包所在的根路径
String rootPath = Source().getParentFile().toString();
String configFilePath = rootPath + "/xxx/l";为什么qq换不了头像了
File configFile = new File(configFilePath);
if (!ists()) {
科比简介try {
男方家长婚礼致辞    //获取类路径下的指定⽂件流
InputStream in = Class().getClassLoader().getResourceAsStream("l");
过年必吃的10个菜
} catch (IOException e) {
throw new IllegalArgumentException("保存⽂件证书失败->" + StackTraceAsString(e));读取配置文件失败
}
}
参考