Springboot 如何获取jar包里面的resource资源文件

Springboot 如何获取jar包里面的resource资源文件

需求:在项目开发中,有时候需要把一些模板文件及静态资源文件放到resource目录中,并且在服务启动的时候去访问这些文件。

问题:在本地开发环境中,通过读取对应的文件路径可以正常访问到,但是打成jar包以后,无法通过路径的方式读取到对应文件

1
private final String sourceFilePath = 		this.getClass().getClassLoader().getResource("").getPath();

上述代码在本地没有问题,服务器会报FileNotFound!

解决方案:

读取jar里面的静态资源文件时不要使用路径,使用文件流读取

1
InputStream inputStream = new ClassPathResource("").getInputStream();

如果需要处理文件,直接用文件流处理,如果必须要通过路径读文件,可以用文件流将文件写入到服务器的目录下,然后再通过路径去读取。

附上将文件流写入到本地的工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* 将InputStream流写入到本地
* @param targetPath 目标路径
* @param inputStream inputStream
* @throws Exception
*/
public static void writeToLocal(String targetPath, InputStream inputStream) throws Exception {
int index;
byte[] bytes = new byte[1024];
FileOutputStream fileOutputStream = new FileOutputStream(targetPath);
while ((index = inputStream.read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, index);
fileOutputStream.flush();
}
fileOutputStream.close();
inputStream.close();
}
Author: Aaron
Link: https://xjsir.cn/2023/06/13/Springboot 如何获取jar包里面的resource资源文件/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.