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

Python018

jar方式运行项目-读取jar包中的文件,第1张

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

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

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

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

import java.io.BufferedReader

import java.io.InputStream

import java.io.InputStreamReader

import java.util.jar.JarEntry

import java.util.jar.JarFile

public class ReadOutJarFile {

public static void main(String[] args) throws Exception {

String jarName="C://test.jar"//Jar包所在的位置

String fileName="com/111.txt"//文件在jar包里的路径

JarFile jarFile = new JarFile(jarName)//读入jar文件

假设有一个jar包,里面有一个test.txt,里面有一行字符串 123abc ,现在要在一个以jar命令运行的spring-boot项目环境中读取,要怎么做?

假设把这个jar包,一个放到D盘的test目录下,一个放到spring-boot项目resources目录下的lib子目录里,可以使用以下两种方法分别读取:

使用mvn clean package打包项目,然后使用java -jar xxx.jar执行该项目文件,观察日志文件就会发现,两种方式都成功了: