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 11 Java/Android
深入理解java.lang.String类的不可变性
Jun 27 Java/Android
Springboot集成阿里云OSS上传文件系统教程
Jun 28 Java/Android
java解析XML详解
Jul 09 Java/Android
SpringRetry重试框架的具体使用
Jul 25 Java/Android
springboot+WebMagic+MyBatis爬虫框架的使用
Aug 07 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
关于maven依赖 ${xxx.version}报错问题
Jan 18 Java/Android
JVM的类加载器和双亲委派模式你了解吗
Mar 13 Java/Android
Spring Cloud OpenFeign模版化客户端
Jun 25 Java/Android
springboot+rabbitmq实现智能家居实例详解
Jul 23 Java/Android
Java代码规范与质量检测插件SonarLint的使用
Aug 05 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中date与gmdate的区别及默认时区设置
2014/05/12 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
python实现抖音视频批量下载
2018/06/20 Python
python实现Zabbix-API监控
2018/09/17 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
应届专科生个人的自我评价
2014/01/05 职场文书
中学生操行评语
2014/04/24 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
python全面解析接口返回数据
2022/02/12 Python
Redis全局ID生成器的实现
2022/06/05 Redis
Python加密与解密模块hashlib与hmac
2022/06/05 Python