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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jar方式运行项目-读取jar包中的文件相关的知识,希望对你有一定的参考价值。

参考技术A

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

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

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

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

jar读取外部和内部配置文件的问题

最近修改XX应用的时候,涉及到需要在jar包中读取工程配置文件的问题。在jar包中,读取配置文件,需要单独处理。

项目中的一些配置文件,如dbconfig.properties log4j.xml 不想打包进jar。

因为可能会修改其中的一些配置信息,打包进jar,就变得比较笨拙,不方便修改文件。

可以用如下方式,实现在jar包中读取外部配置文件。

方法一:

关键代码。

读取properties文件方法:

InputStream ins = getClass().getResourceAsStream("/resource/dbconfig.properties"); 

 

但是log4j.xml 又需要单独处理:

PropertyConfigurator.configure(System.getProperty("user.dir") + "/resource/log4j.xml"); 

 

方法二:

配置文件out.properties和jiar包在同一个目录下面:

FileInputStream inputStream1 = new FileInputStream("out.properties");  

 

配置文件in.properties在jar包内部:

InputStream inputStream2 = a.class.getResourceAsStream("/in.properties"); 


以上是关于jar方式运行项目-读取jar包中的文件的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot + mybatis 只读取到一个jar包中的mapper配置文件

jar包中的类读取配置文件的路径问题,求大家帮帮忙

java 怎么读取web jar中的某个配置文件

打包部署后无法读取jar包里的文件(实测可行,Java中读取jar包中的文件)

jar读取外部和内部配置文件的问题

SpringBoot-读取classpath下文件