zoukankan      html  css  js  c++  java
  • com.jcraft.jsch.JSchException: java.io.FileNotFoundException: file:D:developmentideaProjectssalary-card argetsalary-card-0.0.1-SNAPSHOT.jar!BOOT-INFclasses!keystorelogin_id_rsa 资源未找到

    com.jcraft.jsch.JSchException: java.io.FileNotFoundException: file:D:developmentideaProjectssalary-card argetsalary-card-0.0.1-SNAPSHOT.jar!BOOT-INFclasses!keystorelogin_id_rsa (文件名、目录名或卷标语法不正确。)

    Caused by: java.io.FileNotFoundException: file:D:developmentideaProjectssalary-card argetsalary-card-0.0.1-SNAPSHOT.jar!BOOT-INFclasses!keystorelogin_id_rsa (文件名、目录名或卷标语法不正确。)

    问题:

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

    原因:

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

      这主要是因为jar包是一个单独的文件而不是文件夹,不能通过“file:D:developmentideaProjectssalary-card argetsalary-card-0.0.1-SNAPSHOT.jar!BOOT-INFclasses!keystorelogin_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);

      

    Resource resource = new ClassPathResource("keystore/login_id_rsa");
    InputStream inputStream = resource.getInputStream();
    ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
    byte[] buff = new byte[100];
    int rc = 0;
    while ((rc = inputStream.read(buff, 0, 100)) > 0) {
           swapStream.write(buff, 0, rc);
    }
  • 相关阅读:
    【LOJ#6277】数列分块1
    【LOJ6284】数列分块8
    【洛谷P3275】糖果
    【洛谷P3810】陌上花开
    【洛谷P1052】过河 离散化+dp
    【洛谷P2042】维护数列
    【模板】文艺平衡树
    【洛谷P4145】花神游历各国
    【洛谷P4878】布局
    hdu 5748(LIS)
  • 原文地址:https://www.cnblogs.com/lfalex0831/p/9638887.html
Copyright © 2011-2022 走看看