jar包运行模式下无法访问resources的内部文件
一、前言
本次项目中,有一需求是读取 Resources的内部文件,但是在这个简单的需求缺在实际的生产环境上出现了问题。
项目环境:Springboot
二、问题描述
描述,需要读取springboot项目中resources文件夹下面的一个文件,index.vue。
代码为:
try{
file = ResourceUtils.getFile("classpath:formGenerator/index.vue");
}catch (FileNotFoundException e) {
e.printStackTrace();
}
测试效果在IDEA的运行
中是没有问题的,但是在jar的环境下不行的,会报一个找不到文件
的错误。
解决
InputStream instream = getClass().getClassLoader().getResourceAsStream("classpath:formGenerator/index.vue");
三、问题解析
原因是在通过Springboot进行打包的环境是jar的运行方式,是一个独立的文件。但是这种读取方式相当于读取目录文件
。jar运行的时候找不到。
但是通过ClassLoader的方式可以读取文件。
缺点
读取的方式都是流读取,并不是File文件,需要创建临时文件才能继续操作。
而且最要命的是无法解析为目录文件
。