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 Shutdown Hook场景使用及源码分析
Jun 15 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
Elasticsearch 配置详解
Apr 19 Java/Android
Mybatis-Plus 使用 @TableField 自动填充日期
Apr 26 Java/Android
Spring Boot 实现 WebSocket
Apr 30 Java/Android
Java版 简易五子棋小游戏
May 04 Java/Android
Java实现扫雷游戏详细代码讲解
May 25 Java/Android
Java时间工具类Date的常用处理方法
May 25 Java/Android
利用正则表达式匹配浮点型数据
May 30 Java/Android
Android 中的类文件和类加载器详情
Jun 05 Java/Android
基于Android10渲染Surface的创建过程
Aug 14 Java/Android
Android移动应用开发指南之六种布局详解
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
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
Yii快速入门经典教程
2015/12/28 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
学习ExtJS border布局
2009/10/08 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
js中的闭包学习心得
2018/02/06 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
解决python写的windows服务不能启动的问题
2014/04/15 Python
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
python如何定义带参数的装饰器
2018/03/20 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
C和C++经典笔试题附答案解析
2014/08/18 面试题
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
党员创先争优承诺书
2014/03/26 职场文书
学校教师安全责任书
2014/07/23 职场文书
单位委托函范文
2015/01/29 职场文书
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS