SpringBoot读取Resource下文件的几种方式

最近在项目中涉及到Excle的导入功能,通常是我们定义完模板供用户下载,用户按照模板填写完后上传;这里待下载模板位置为resource/excleTemplate/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包查看结果如下:
在这里插入图片描述

其中cst文件中是编译后class文件存放位置,excleTemplate是模板存放位置,类加载器读取的是cst下class文件,同样可以读取excleTemplate下的模板的文件流了。

所以总结一下:假如文件是在jar包中,读取方式应当使用基于类加载器读取文件流的方式,比如前三种方法;使用基于java中File方式的读取,在jar包情况下是读取不到的,比方说第四种。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子游戏跟计算机有什么关联,电脑和电子游戏对小学生的影响

小学生个人电脑的普及率在飞速上升。随着年龄的增长,孩子使用电脑、网络的机会和时间不断增加。而与电脑相关的电子游戏也已成为孩子的主要活动内容之一,对他们的生活与发展产生了诸多影响。很多家长都在担忧电脑和电子游戏会对孩子产生负面影响。规律一…

kido机器人用流量吗_国脉电信200元天网卡,交1700流量无线用,拉人加入还会有不错的收益,你信吗?反正我是不信!...

最近又很多人咨询小编国脉天电信网卡是真的吗,是不是骗人的。关于国脉天网骗局,反传销联合会曾在网站发表了一篇关于国脉天网骗局的文章。今天来说说200元的国脉天网和1700的流量包。首先来说说200元购买的国脉天网卡,这个也就是国脉电信推广…

孩子学计算机最佳年龄,孩子学编程最佳年龄是多少

随着IT技术几十年的发展,编程也正变得越来越简单、易用,而不再是那么复杂、繁琐。那么孩子学编程最佳年龄是多少呢?孩子学编程的最佳年龄3-5岁的儿童可以先进行少儿编程语言启蒙,正式学习编程建议在上小学后。国外脑科学实证研究表…

Java:File.separator作用相当于 ‘ \ ‘

其实 File.separator 的作用相当于 ’ \ ’ 在 windows 中 文件文件分隔符用 ’ \ ’ 或者 ’ / ’ 都可以 但是在 Linux 中,是不识别 ’ \ ’ 的,而 File.separator 是系统默认的文件分隔符号,在 UNIX 系统上,此字段的值为 ’ /…

messageformat.format() 自定义参数名_DedeCMS的Java版mcms 第四季之一: 自定义插件

自定义mcms插件包含自定义字典、自定义搜索、自定义模型、自定义表单、自定义页面等功能依赖: Apache Maven<dependency><groupId>net.mingsoft</groupId><artifactId>ms-mdiy</artifactId><version>当前版本</version> </de…

linux给文件加可执行权限

1、加最高权限 chmod 775 文件名 2、加可执行权限 chmod x 文件名

jenkins重启 linux_在Linux中,Jenkins无法启动

问题描述升级后去运行jenkins&#xff0c;并获得以下信息&#xff1a;start jenkinsstart: Job failed to start就是这样…詹金的日志中什么也没有显示…所以很难说很难调试。 (它尚未运行&#xff0c;或类似的东西)。我应该在其他地方查看另一个日志会有所帮助吗&#xff1f; …

现在学html4,HTML学习心得(4)

HTML学习心得(4)CSS的简单框架结构和元素渲染什么是CSS​ CSS&#xff0c;中文名&#xff1a;层叠样式表。是一种用来表现HTML等文件样式的计算机语言。CSS不仅可以静态地修饰网页&#xff0c;还可以配合各种脚本语言动态地对网页各元素进行格式化。​ CSS 能够对网页中元素位置…

JAVA中的内部类(一)静态内部类

Java中的静态内部类&#xff1a;在定义的内部类前加static修饰符&#xff0c;此时的内部类就是静态内部类。通过一个例子来了解静态内部类都有哪些特点。 public class Outer {//定义一个实例变量和一个静态变量private int a;private static int b;//定义一个静态方法和一个非…

hadoop 单机单间_Hadoop单机模式配置

Required Software1. 安装Java环境推荐的版本在链接中有介绍HadoopJavaVersions.2. 安装ssh以使用hadoop脚本管理远程Hadoop daemons.Download HadoopInstalling Software安装JDK&#xff0c;网上的教程比较多&#xff0c;不做详述安装ssh&#xff0c;在Ubuntu Linux系统上通过…

JAVA中的内部类(二)成员内部类

Java中的成员内部类&#xff08;实例内部类&#xff09;&#xff1a;相当于类中的一个成员变量&#xff0c;下面通过一个例子来观察成员内部类的特点 public class Outer {//定义一个实例变量和一个静态变量private int a;private static int b;//定义一个静态方法和一个非静态…

计算机里的网络是什么意思啊,计算机网络中本地站点是什么意思

Dreamweaver 站点提供一种组织所有与 Web 站点关联的文档的方法。通过在站点中组织文件&#xff0c;可以利用 Dreamweaver 将站点上传到 Web 服务器、自动跟踪和维护链接、管理文件以及共享文件。若要充分利用 Dreamweaver 的功能&#xff0c;需要定义一个站点。Dreamweaver 站…

angularjs input标签用一个日期插件后数据不能双向绑定了_微信如何定时发朋友圈?(最方便最好用的办法!)...

微信怎么发朋友圈&#xff08;微信如何定时发朋友圈&#xff09;作为一个运营新媒体的小编&#xff0c;很多情况下&#xff0c;我都会遇到定时发文的情况&#xff0c;对于我来说&#xff0c;定时发文很简单。只要将文案编辑好&#xff0c;使用平台的定时发文功能就可以&#xf…

分类学计算机面试什么,史上最全的机器学习面试题-机器学习爱好者必看

1.什么是机器学习机器学习是为了应对系统程序设计&#xff0c;属于计算机科学类的学科&#xff0c;它能根据经验进行自动学习和提高。例如&#xff1a;一个由程序操纵的机器人&#xff0c;它能根据从传感器搜集到的数据&#xff0c;完成一系列的任务和工作。它能根据数据自动地…

POI的getLastRowNum() getPhysicalNumberOfRows()区别

// 获得总记录数&#xff08;行数&#xff09;int lastRowNum sheet.getLastRowNum();int rowNumsheet.getPhysicalNumberOfRows();同样的都是获取Excel工作sheet行数的两个方法 getLastRowNum()getPhysicalNumberOfRows()他们的主要区别是&#xff1a; getPhysicalNumberOfR…

java获取当月有几天_腾讯程序员裸辞3个月,转行去送外卖,曝出当月收入网友:又骗我去送外卖...

最近在职业论坛看到这样一个热门的帖子&#xff0c;“腾讯员工裸辞3个月&#xff0c;转行去送外卖&#xff0c;曝出当月收入网友&#xff1a;又骗我去送外卖“到底怎么回事&#xff1f;请往下看。原来一位腾讯员工分享了自己从程序员到外卖员的经历&#xff0c;据男子说在腾讯&…

锦州哪家计算机学校好,锦州十大排名中专

一、招生专业序号专业代码专业名称学制学习年限科类学费(元/年/生)1600108铁道交通运营管理3年3-5年文史50002600106铁道信号自动控制3年3-5年理工50003600107铁道通信与信息化技术3年3-5年理工50004600101铁道机车3年3-5年理工50005600102铁道车辆...技校中专招生大学招生信息…

设置response.setContentType(“application/json;charset=utf-8“)后还是中文乱码

首先是我确认了response.setContentType(“application/json;charsetutf-8”)是设置正确了 代码如下&#xff1a; 找不到头绪&#xff0c;看了一下前端请求头信息&#xff1a; 确定是response.setContentType(“application/json;charsetutf-8”)没有生效&#xff0c;代码是没…

二年级计算机认识键盘教案,关于《认识键盘》的教学反思

关于《认识键盘》的教学反思键盘是计算机最基本、最常用的输入设备&#xff0c;通过键盘接口与主机相连&#xff0c;用户通过按键向计算机输入信息。本课学生学习的是标准的104键键盘&#xff0c;其中3个是Windows专用键。学生已经学习了鼠标操作的能力&#xff0c;在第七课安排…

后台返回给前端json字段的大小写问题,Lombok的坑@Data,@Getter

Lombok的Data注解踩坑&#xff0c;Setter的大小写问题 以前在处理前端请求的实体类的时候&#xff0c;都是用Lombok的Data注解对实体类进行getter、setter以及toString的声名&#xff0c;今天处理实体类的时候&#xff0c;发现生成的setter方法和Java Bean的命名规则不一致。&…