jar方式运行项目-读取jar包中的文件

应用场景:

在目前的微服务和容器部署的SpringBoot坏境下,我们一般将项目直接打成 jar包的方式运行(java -jar *),我们可能需要读取resources目录下的自定义文件,想在程序运行时找到该目录,并读取需要的文件。

踩过的坑:

当时我使用System.getProperty("user.dir")获取工作目录的坑,本地idea工具运行没问题,但是一但打成jar包,路径会变成jar包所在的目录,无法读取jar内部的文件,不建议用这种方式

由于jar中的文件都属于资源的一种,所以获取需从类加载器进行获取。正确的姿势是采用this.getClass().getClassLoader().getResourceAsStream()的方式。

代码示例:

        try (BufferedReader in = new BufferedReader(new InputStreamReader(
                Objects.requireNonNull(this.getClass()
                                .getClassLoader().getResourceAsStream(fileName),
                        "文件未找到:" + fileName),
                StandardCharsets.UTF_8)
        )) {
            // TODO 你的业务代码。。。
        } catch (IOException e) {
            e.printStackTrace();
        }
乱码小提示:

读取自定义文件时,由于getResourceAsStream方法返回的是一个InputStream流,采用InputStreamReader这种方式最好指定一种编码方式,不然可能中文乱码!(我在解析xml时中文乱码)

你可能感兴趣的:(jar方式运行项目-读取jar包中的文件)