SpringBootclasspath下读取Resource下⽂件
模板⽂件放在resource⽬录下
<resources>
<resource>
<filtering>true</filtering>
<directory>src/resources</directory>
<includes>
<include>*.*</include>
</includes>
</resource>
</resources>
</resources>
确保资源⽂件加载,地址为相对路径。编译后resource与java代码在同级⽬录class下。
第⼀种:
ClassPathResource classPathResource = new ClassPathResource("excleTemplate/test.xlsx");
InputStream inputStream =InputStream();
第⼆种:
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("excleTemplate/test.xlsx");
第三种:
InputStream inputStream = Class().getResourceAsStream("/excleTemplate/test.xlsx");
第四种:
File file = File("classpath:excleTemplate/test.xlsx");
InputStream inputStream = new FileInputStream(file);
经测试:
前三种⽅法在开发环境(IDE中)和⽣产环境(linux部署成jar包)都可以读取到,第四种只有开发环境时可以读取到,⽣产环境读取失败。
推测主要原因是springboot内置tomcat,打包后是⼀个jar包,因此通过⽂件读取获取流的⽅式⾏不通,因为⽆法直接读取压缩包中的⽂件,读取只能通过流的⽅式读取。
前三种都可以读取到其实殊途同归,直接查看底层代码都是通过类加载器读取⽂件流,类加载器可以读取jar包中的编译后的class⽂件,当然也是可以读取jar包中的⽂件流了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论