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如何使用logback实现多环境配置?
Jun 16 Java/Android
Spring Boot 实现敏感词及特殊字符过滤处理
Jun 29 Java/Android
SpringCloud之@FeignClient()注解的使用方式
Sep 25 Java/Android
使用jpa之动态插入与修改(重写save)
Nov 23 Java/Android
JVM的类加载器和双亲委派模式你了解吗
Mar 13 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
Mar 17 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
剑指Offer之Java算法习题精讲二叉树专项训练
Mar 21 Java/Android
Java Lambda表达式常用的函数式接口
Apr 07 Java/Android
SpringBoot使用AOP实现统计全局接口访问次数详解
Jun 16 Java/Android
Java中的Kafka为什么性能这么快及4大核心详析
Sep 23 Java/Android
Java Redisson多策略注解限流
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
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
浅析PHP文件下载原理
2014/12/25 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
js控制table合并具体实现
2014/02/20 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
文字自荐书范文
2014/02/10 职场文书
小学安全教育材料
2014/02/17 职场文书
安全生产责任书
2014/03/12 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
银行招聘自荐信
2015/03/06 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle