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 18 Java/Android
详解SpringBoot异常处理流程及原理
Jun 21 Java/Android
详解java如何集成swagger组件
Jun 21 Java/Android
java基础——多线程
Jul 03 Java/Android
使用@Value值注入及配置文件组件扫描
Jul 09 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
正则表达式拆分url实例代码
Feb 24 Java/Android
Java字符缓冲流BufferedWriter
Apr 09 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 Java/Android
Android实现图片九宫格
Jun 28 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 Java/Android
向Spring IOC 容器动态注册bean实现方式
Jul 15 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使用feof()函数读文件的方法
2014/11/07 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
PHP中Array相关函数简介
2016/07/03 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
在javascript中如何得到中英文混合字符串的长度
2014/01/17 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
Python连接Redis的基本配置方法
2018/09/13 Python
python中常用的数据结构介绍
2021/01/12 Python
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
工程现场管理求职自荐信
2013/10/02 职场文书
打架检讨书100字
2014/01/19 职场文书
班班通项目实施方案
2014/02/25 职场文书
成龙洗发水广告词
2014/03/14 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
欢送领导祝酒词
2015/08/12 职场文书
高中化学教学反思
2016/02/22 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP