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);