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
ObjectMapper 如何忽略字段大小写
Jun 29 Java/Android
Java面试题冲刺第十九天--数据库(4)
Aug 07 Java/Android
使用logback实现按自己的需求打印日志到自定义的文件里
Aug 30 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
Spring Boot项目传参校验的最佳实践指南
Apr 05 Java/Android
Android自定义双向滑动控件
Apr 19 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
Apr 20 Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 Java/Android
Java中的Kotlin 内部类原理
Jun 16 Java/Android
阿里面试Nacos配置中心交互模型是push还是pull原理解析
Jul 23 Java/Android
Java获取字符串编码格式实现思路
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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
前端微信支付js代码
2016/07/25 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
设置cookie指定时间失效(实例代码)
2017/05/28 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
浅谈MySQL中的触发器
2015/05/05 Python
浅谈Python的文件类型
2016/05/30 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
python psutil监控进程实例
2019/12/17 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
python如何爬取动态网站
2020/09/09 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
Python中qutip用法示例详解
2020/10/02 Python
python实现逻辑回归的示例
2020/10/09 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
总经理工作职责范文
2014/03/14 职场文书
关于教师节的广播稿
2014/09/10 职场文书
英文感谢信格式
2015/01/21 职场文书
离婚协议书范本
2015/01/26 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android
spring 项目实现限流方法示例
2022/07/15 Java/Android