SpringBoot打成jar包后,读取resources目录下的文件异常处理
本例引发错误的使用:
String filePath = this.getClass().getClassLoader().getResource("certificate/kexin_client.p12").getPath();
String client_file = filePath;
String client_passwd = passwd;
以上错误用法在mvn进行package,引发异常java.io.FileNotFoundException的出现:
异常:
java.io.FileNotFoundException:
file:\C:\Users\JK\Downloads\apiservers\target\apiservers-0.0.1-SNAPSHOT.jar! (文件名、目录名或卷标语法不正确。)
原因:
1、本地IDE测试过程中,文件是真实存在于磁盘的某个目录。此时获取的文件路径,是可以正常读取的,因为文件确实存在。
2、打包jar以后,实际上文件是存在于jar这个文件里面的资源文件,在磁盘没有真实路径的(\BOOT-INF\classes!\certificate\kexin_client.p12)
3、所以通过ResourceUtils.getFile或者this.getClass().getResource("")方法无法正确获取文件。
解决:
1、指定要加载的资源路径与当前类所在包的路径一致,采用流的方式进行处理。
InputStream inputStream = this.getClass().getResourceAsStream("path")
参考:
https://www.jianshu.com/p/8bb3c63d3fa2
https://blog.csdn.net/seapeak007/article/details/76572256
https://blog.csdn.net/ccmedu/article/details/78783248