SpringBoot读取Resource下文件的4种方法


Posted in Java/Android onJuly 02, 2021

SpringBoot读取Resource下文件

最近在项目中涉及到Excle的导入功能,通常是我们定义完模板供用户下载,用户按照模板填写完后上传;这里待下载模板位置为resource/excelTemplate/test.xlsx,尝试了四种读取方式,并且测试了四种读取方式分别的windows开发环境下(IDE中)读取和生产环境(linux下jar包运行读取)。

第一种:

ClassPathResource classPathResource = new ClassPathResource("excleTemplate/test.xlsx");
InputStream inputStream =classPathResource.getInputStream();

第二种:

InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("excleTemplate/test.xlsx");

第三种

InputStream inputStream = this.getClass().getResourceAsStream("/excleTemplate/test.xlsx");

第四种

File file = ResourceUtils.getFile("classpath:excleTemplate/test.xlsx");
InputStream inputStream = new FileInputStream(file);

经测试:

前三种方法在开发环境(IDE中)和生产环境(linux部署成jar包)都可以读取到,第四种只有开发环境 时可以读取到,生产环境读取失败。

推测主要原因是springboot内置tomcat,打包后是一个jar包,无法直接读取jar包中的文件,读取只能通过类加载器读取。

前三种都可以读取到其实殊途同归,直接查看底层代码都是通过类加载器读取文件流,类加载器可以读取jar包中的编译后的class文件,当然也是可以读取jar包中的excle模板了。

用解压软件打开jar包查看结果如下:

SpringBoot读取Resource下文件的4种方法

其中cst文件中是编译后class文件存放位置,excleTemplate是模板存放位置,类加载器读取的是cst下class文件,同样可以读取excleTemplate下的模板的文件流了。

所以总结一下:

假如文件是在jar包中,读取方式应当使用基于类加载器读取文件流的方式,比如前三种方法;使用基于java中File方式的读取,在jar包情况下是读取不到的,比方说第四种。

SpringBoot打包后无法读取Resource下的配置文件的解决

SpringBoot读取Resource下文件的4种方法

有个小程序需要读取这个证书

解决办法:

private InputStream getZs(){
    ClassPathResource classPathResource = new ClassPathResource("Pinfeng1120845.Prod.p12");
    InputStream inputStream = null;
    try {
        inputStream = classPathResource.getInputStream();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return inputStream;
}

用上面这个种方法读取在jar包内 和 IDEA里都可以读取到!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Java循环队列与非循环队列的区别总结
Jun 22 Java/Android
elasticSearch-api的具体操作步骤讲解
Jun 28 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
Java常用函数式接口总结
Jun 29 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
SSM项目使用拦截器实现登录验证功能
Jan 22 Java/Android
Android超详细讲解组件ScrollView的使用
Mar 31 Java/Android
SpringBoot整合minio快速入门教程(代码示例)
Apr 03 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
Apr 24 Java/Android
SpringBoot项目部署到阿里云服务器的实现步骤
Jun 28 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 Java/Android
Java基础-封装和继承
Java 泛型详解(超详细的java泛型方法解析)
SpringBoot集成Druid连接池连接MySQL8.0.11
Java使用httpRequest+Jsoup爬取红蓝球号码
使用Springboot实现健身房管理系统
Java Kafka 消费积压监控的示例代码
springboot临时文件存储目录配置方式
Jul 01 #Java/Android
You might like
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
php四种定界符详解
2017/02/16 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
js window.event对象详尽解析
2009/02/17 Javascript
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
python的id()函数解密过程
2012/12/25 Python
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
python实现报表自动化详解
2017/11/16 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
python 读写excel文件操作示例【附源码下载】
2019/06/19 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
北京天润融通.net面试题笔试题
2012/02/20 面试题
机械工程学院大学生求职信
2014/05/25 职场文书
运动会广播稿20字
2015/08/19 职场文书
Python中itertools库的四个函数介绍
2022/04/06 Python