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 Swing实现自助取款机系统
Jun 11 Java/Android
SpringBoot2 参数管理实践之入参出参与校验的方式
Jun 16 Java/Android
详解Java实践之抽象工厂模式
Jun 18 Java/Android
Java Optional<Foo>转换成List<Bar>的实例方法
Jun 20 Java/Android
Spring mvc是如何实现与数据库的前后端的连接操作的?
Jun 30 Java/Android
简述Java中throw-throws异常抛出
Aug 07 Java/Android
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
Sep 25 Java/Android
关于Spring配置文件加载方式变化引发的异常详解
Jan 18 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
Jun 01 Java/Android
Android中的Launch Mode详情
Jun 05 Java/Android
java实现自定义时钟并实现走时功能
Jun 21 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之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
Javascript中replace()小结
2015/09/30 Javascript
原生js实现放大镜
2017/02/20 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
vue全局使用axios的操作
2020/09/08 Javascript
python中异常报错处理方法汇总
2016/11/20 Python
python中hashlib模块用法示例
2017/10/30 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
python 画条形图(柱状图)实例
2020/04/24 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
建龙钢铁面试总结
2014/04/15 面试题
机关道德讲堂实施方案
2014/03/15 职场文书
库房保管员岗位职责
2014/04/07 职场文书
会计系毕业生求职信
2014/05/28 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
个人总结格式范文
2015/03/09 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
教导处教学工作总结
2015/08/12 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers