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 相关文章推荐
手把手教你用SpringBoot将文件打包成zip存放或导出
Jun 11 Java/Android
教你用Java在个人电脑上实现微信扫码支付
Jun 13 Java/Android
深入理解java.lang.String类的不可变性
Jun 27 Java/Android
分析ZooKeeper分布式锁的实现
Jun 30 Java/Android
springboot 多数据源配置不生效遇到的坑及解决
Nov 17 Java/Android
JPA 通过Specification如何实现复杂查询
Nov 23 Java/Android
Android基于Fresco实现圆角和圆形图片
Apr 01 Java/Android
Java 超详细讲解ThreadLocal类的使用
Apr 07 Java/Android
springboot读取nacos配置文件
May 20 Java/Android
SpringBoot详解自定义Stater的应用
Jul 15 Java/Android
volatile保证可见性及重排序方法
Aug 05 Java/Android
Java获取字符串编码格式实现思路
Sep 23 Java/Android
Java基础-封装和继承
Java 泛型详解(超详细的java泛型方法解析)
SpringBoot集成Druid连接池连接MySQL8.0.11
Java使用httpRequest+Jsoup爬取红蓝球号码
使用Springboot实现健身房管理系统
Java Kafka 消费积压监控的示例代码
springboot临时文件存储目录配置方式
Jul 01 #Java/Android
You might like
社区(php&&mysql)二
2006/10/09 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
canvas实现钟表效果
2017/02/13 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
python实现定时提取实时日志程序
2018/06/22 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
XML文档面试题
2015/08/05 面试题
生物技术专业研究生自荐信
2013/09/22 职场文书
师范生自荐信范文
2013/10/06 职场文书
生产现场工艺工程师岗位职责
2013/11/28 职场文书
电教室标语
2014/06/20 职场文书
授权委托书格式范文
2014/08/02 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
青岛海底世界导游词
2015/02/11 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript
详解SQL报错盲注
2022/07/23 SQL Server