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 相关文章推荐
SpringCloud Alibaba 基本开发框架搭建过程
Jun 13 Java/Android
解析Java异步之call future
Jun 14 Java/Android
Java使用httpRequest+Jsoup爬取红蓝球号码
Jul 02 Java/Android
mybatis 获取无数据的字段不显示的问题
Jul 15 Java/Android
Java如何实现通过键盘输入一个数组
Feb 15 Java/Android
Java 超详细讲解设计模式之中的抽象工厂模式
Mar 25 Java/Android
Netty客户端接入流程NioSocketChannel创建解析
Mar 25 Java/Android
教你在 Java 中实现 Dijkstra 最短路算法的方法
Apr 08 Java/Android
Java Spring Lifecycle的使用
May 06 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 Java/Android
Spring中bean集合注入的方法详解
Jul 07 Java/Android
OpenFeign实现远程调用
Aug 14 Java/Android
Java基础-封装和继承
Java 泛型详解(超详细的java泛型方法解析)
SpringBoot集成Druid连接池连接MySQL8.0.11
Java使用httpRequest+Jsoup爬取红蓝球号码
使用Springboot实现健身房管理系统
Java Kafka 消费积压监控的示例代码
springboot临时文件存储目录配置方式
Jul 01 #Java/Android
You might like
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
php微信开发之百度天气预报
2016/11/18 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
jQuery 监控键盘一段时间没输入
2016/04/22 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
详解Python如何获取列表(List)的中位数
2016/08/12 Python
python递归法解决棋盘分割问题
2019/07/17 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
美国电视购物HSN官网:HSN
2016/09/07 全球购物
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
营业经理岗位职责
2013/11/10 职场文书
银行职员思想汇报
2013/12/31 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
爱的教育观后感
2015/06/17 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang
css3 选择器
2022/05/11 HTML / CSS