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项目中控制台日志的保存配置操作
Jun 18 Java/Android
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
Jun 21 Java/Android
Spring Data JPA的Audit功能审计数据库的变更
Jun 26 Java/Android
dubbo服务整合zipkin详解
Jul 26 Java/Android
Java使用JMeter进行高并发测试
Nov 23 Java/Android
java协程框架quasar和kotlin中的协程对比分析
Feb 24 Java/Android
MybatisPlus EntityWrapper如何自定义SQL
Mar 22 Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
Apr 20 Java/Android
IDEA 2022 Translation 未知错误 翻译文档失败
Apr 24 Java/Android
Java死锁的排查
May 11 Java/Android
Java基础-封装和继承
Java 泛型详解(超详细的java泛型方法解析)
SpringBoot集成Druid连接池连接MySQL8.0.11
Java使用httpRequest+Jsoup爬取红蓝球号码
使用Springboot实现健身房管理系统
Java Kafka 消费积压监控的示例代码
springboot临时文件存储目录配置方式
Jul 01 #Java/Android
You might like
phpBB BBcode处理的漏洞
2006/10/09 PHP
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
PHP array_push 数组函数
2009/12/26 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
laravel学习教程之关联模型
2016/07/30 PHP
JS 对象介绍
2010/01/20 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
VUE安装使用教程详解
2019/06/03 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
在Mac OS上搭建Python的开发环境
2015/12/24 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
Python爬取某平台短视频的方法
2021/02/08 Python
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
一套软件开发工程师笔试题
2015/05/18 面试题
大学毕业生自我鉴定
2013/11/05 职场文书
四年级科学教学反思
2014/02/10 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
父母寄语大全
2014/04/12 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电