spring boot打包文件后,报错No such file or directory

现象:

一段代码:

        ClassLoader loader = XXXUtil.class.getClassLoader();
        String jsFileName = loader.getResource("") + "/resources/" + fileName;
        logger.info("文件路径为"+jsFileName);

   在本地开发测试,完全ok(windows下);

 上测试环境,报错/opt/jar_code/xxx/xxxx.jar!/BOOT-INF/classes!/resources/xxxxx.js (No such file or directory)

上述目录出现"!" 比较奇怪。

解决方案:

不读文件路径,直接读文件流

            input = XXXUtil.class.getClassLoader()
                    .getResourceAsStream("resources" + File.separator + fileName);
            reader = new InputStreamReader(input, Constant.UTF_8);

初看两种方式,应该是一致的。

其实则不同:

1.使用文件路径,要求该路径下的文件在文件系统上是可以访问的。因为jar文件需要解压才能访问,直接访问不了。

2.使用流,直接读文件,则不存在上述要求。

原文地址:https://www.cnblogs.com/davidwang456/p/8624769.html