SpringBoot 读取文件代码模版

栏目: Java · 发布时间: 5年前

内容简介:未打包是没问题的,打完包后就发生了错误。开始逐步定位问题。

引言

Alice 上线后,学生导入模版文件下载失败。

SpringBoot 读取文件代码模版

未打包是没问题的,打完包后就发生了错误。开始逐步定位问题。

原方法

File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "static/导入学生模板.xlsx");
InputStream inputStream = new FileInputStream(file);
Workbook workbook = new XSSFWorkbook(inputStream);

经测试,问题出在 ResourceUtils.getFile 这个方法上。

ResourceUtils.CLASSPATH_URL_PREFIX + "static/导入学生模板.xlsx"

字符串拼接后就是 classpath:static/导入学生模板.xlsx ,没打包时,该方法能正常获取到该 Excel 文件。

ResourceUtils.getFile 是获取磁盘上的文件,而打完包之后, resources 目录了下的所有资源都被打进了 jar 包,所以不存在相应的 Excel 文件,获取的时候就报错了。找不到文件。

测试

将打好的 jar 包解压,主要的东西都在 BOOT-INF 里。 META-INF 里面有 pom.xml ,应该是存储项目信息的。 org 目录内是 springframework 的一些 class 字节码。

SpringBoot 读取文件代码模版

BOOT-INF 内就是本项目的核心代码与第三方库。

SpringBoot 读取文件代码模版

classes 目录下就是本项目的核心代码,我们的 Excel 就在这里面。

SpringBoot 读取文件代码模版

lib 目录下是项目中引用的第三方 jar 包,里面有我们常用的 slf4jspring-bootjar 包。

SpringBoot 读取文件代码模版

所以, Spring Boot 的项目一般都较大,有一部分原因是把许多第三方包都打包进去了。

SpringBoot 读取文件代码模版

解决方案

@Autowired 一个 ResourceLoader ,然后调用 getResource 方法,加载资源。

想想也不难理解, SpringBoot 启动时读取 application.yml 配置, Spring 的源码中就是使用 ResourceLoader 实现的。

只不过源码中直接用的上下文对象,一个上下文对象不只是一个 IOC 容器,还是一个资源加载器。(上下文其实有很多的功能,可以点开 Spring 源码看一看,很有意思。)

ResourcePatternResolver 派生自 ResourceLoader 接口。

SpringBoot 读取文件代码模版

SpringBoot 读取文件代码模版

代码模版,以后读取文件就这样写,啥毛病没有:

Resource resource = this.resourceLoader.getResource(ResourceUtils.CLASSPATH_URL_PREFIX + "static/导入学生模板.xlsx");

总结

千淘万漉虽辛苦,吹尽狂沙始到金。

一路走来,一路总结。最后留下的,是小本本中记录的代码模版与最佳实践。

SpringBoot 读取文件代码模版


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图解CIO工作指南(第4版)

图解CIO工作指南(第4版)

[日] 野村综合研究所系统咨询事业本部 / 周自恒 / 人民邮电出版社 / 2014-3 / 39.00

《图解CIO工作指南(第4版)》是一本实务手册,系统介绍了企业运用IT手段提高竞争力所必需的管理方法和实践经验,主要面向CEO或CIO等企业管理人士。 《图解CIO工作指南(第4版)》分为三个部分。第1部分的主题为IT管理,着重阐述运用IT技术提高企业竞争力所必需的所有管理业务,具体包括制定作为企业方针的IT战略,以及统筹执行该战略时与IT相关的人力、物力、财力、风险等要素在内的一系列管理业......一起来看看 《图解CIO工作指南(第4版)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码