com.jcraft.jsch.JSchException: java.io.FileNotFoundException: file:D:developmentideaProjectssalary-cardargetsalary-card-0.0.1-SNAPSHOT.jar!BOOT-INFclasses!keystorelogin_id_rsa 资源未找到

com.jcraft.jsch.JSchException: java.io.FileNotFoundException: file:\D:\development\ideaProjects\salary-card\target\salary-card-0.0.1-SNAPSHOT.jar!\BOOT-INF\classes!\keystore\login_id_rsa (文件名、目录名或卷标语法不正确。)

Caused by: java.io.FileNotFoundException: file:\D:\development\ideaProjects\salary-card\target\salary-card-0.0.1-SNAPSHOT.jar!\BOOT-INF\classes!\keystore\login_id_rsa (文件名、目录名或卷标语法不正确。)

 

问题:

  资源未获取到,开发环境没问题,测试环境有问题;

原因:

  经排查,发现是因为在打完jar包后运行,jar包中无法获取对应目录的资源文件;

  这主要是因为jar包是一个单独的文件而不是文件夹,不能通过“file:\D:\development\ideaProjects\salary-card\target\salary-card-0.0.1-SNAPSHOT.jar!\BOOT-INF\classes!\keystore\login_id_rsa”定位jar包内的资源。

解决:

  所以综上所述,我们在通过jar包来访问的话,不要使用getResource或getFile方法来访问了,使用resource.getInputStream() getResourceAsStream()方法,通过流的形式来访问资源是可以的;

  例:

 

InputStream is=this.getClass().getResourceAsStream("keystore/login_id_rsa");
BufferedReader br
=new BufferedReader(new InputStreamReader(is));
String s
="";
while((s=br.readLine())!=null)
  System.out.println(s);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzgpz.html