springboot打成jar包后linux服务器上无法读取resources资源文件里文件路径的问题

  • Post author:
  • Post category:linux


1、起因

将支付验正证书信息放在项目的resources资源文件下在本地通过

this.getClass().getResource("/").getPath()

可以正常读取证书信息,但是打包部署到linux服务器上时报

java.io.FileNotFoundException


2、解决方法


使用


applicationHome.getSource().getParentFile().toString();


读取jar包中的文件流



具体代码如下:

     public class CopyCertFile {

    /**
     * (解决linux系统上找不到证书文件问题)
     * @param certPath
     */
    public void copyCertFile(String certPath){
        ApplicationHome applicationHome = new ApplicationHome(CopyCertFile.class);
        //项目打包成jar包所在的根路径
        String rootPath = applicationHome.getSource().getParentFile().toString();
        String configFilePath = rootPath + certPath;
        File configFile = new File(configFilePath);
        if (!configFile.exists()) {
            try {
                //获取类路径下的指定文件流
                InputStream in = this.getClass().getClassLoader().getResourceAsStream(certPath);
                FileUtils.copyInputStreamToFile(Objects.requireNonNull(in, "证书文件找不到"), configFile);
            } catch (IOException e) {
                throw new IllegalArgumentException("保存文件证书失败->" + e.getMessage());
            }
        }
    }
}



版权声明:本文为younha66原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。