引言

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

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

原方法

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字节码。

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

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

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

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

解决方案

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

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

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

ResourcePatternResolver派生自ResourceLoader接口。

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

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

总结

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

——刘禹锡《浪淘沙词九首·其九》

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

springboot读取linux文件_SpringBoot 读取文件代码模版相关推荐

  1. python连接linux服务器读取txt文件_python 读取Linux服务器上的文件方法

    使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hos ...

  2. springboot读取linux文件_SpringBoot读取Resource下文件的几种方式

    最近在项目中涉及到Excle的导入功能,通常是我们定义完模板供用户下载,用户按照模板填写完后上传:这里待下载模板位置为resource/excelTemplate/test.xlsx,尝试了四种读取方 ...

  3. k8s springboot 文件_Springboot整合Spring Cloud Kubernetes读取ConfigMap支持自动刷新配置的教程...

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但 ...

  4. linux读取内存文件,linux – 使用模块读取内核内存

    首先让我先说读任意内核内存是一件棘手的事!并且有很多方法可以做到这一点,它们的复杂程度和灵活性各不相同. 1)硬编码地址. 在内核版本的System.map文件中搜索它: # grep sys_cal ...

  5. Linux不能读取目录,关于Linux上面无法读取资源目录下文件的问题

    一开始我的代码是这样子的,读取本地子路径下的json文件 代码运行的时候,在window是可以正常的 @Override public String getBannerStr() { String s ...

  6. SpringBoot yml文件数据读取

    读取配置数据 使用 @Value注解 使用 @Value("表达式") 注解可以从配合文件中读取数据,注解中用于读取属性名引用方式是:${一级属性名.二级属性名--} 我们可以在 ...

  7. linux读苹果格式文件,mac os 如何读取 Linux ext4 格式的硬盘

    mac os 如何读取 Linux ext4 格式的硬盘 很多时候需要在macOS上操作Linux的ext4分区,然后macOS系统默认并不支持ext4等分区格式.而MacOS并不支持读取这个格式的文 ...

  8. python代码读取文件并将文件反序存入另外一个文件

    python代码读取文件并将文件反序存入另外一个文件 #data[::-1] 实现了反转(reverse) #python代码读取文件并将文件反序存入另外一个文件 # Open the file in ...

  9. python从文件中读取数据_使用Python脚本从文件读取数据代码实例

    这篇文章主要介绍了使用Python脚本从文件读取数据代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近自学Python的进度比较慢,工作之 ...

最新文章

  1. C++程序中常用的sprintf
  2. python 模糊匹配 合并_Python Pandas模糊合并/匹配重复
  3. android的签名问题
  4. HDU - 4856 Tunnels(哈密顿路径+状压dp)
  5. ASP.NET Core Razor 视图预编译、动态编译
  6. Android中发现蓝牙设备的广播是,Android 蓝牙设备的查找和连接
  7. 2018北京ICPC H. Approximate Matching(AC自动机+DP)
  8. Android 6.0 sensor 框架详解 (application层)
  9. Hive的概述、流程和优化
  10. 非标自动化设计全过程,建议收藏
  11. 简单易懂的方式去看C语言精华--指针
  12. 手机管理应用研究【4】—— 手机加速篇
  13. Coding and Paper Letter(三十)
  14. 游戏手柄(JoyStick)编程控制的一个简单代码(Qt)
  15. Android 网络图片,gif 下载并保存到相册
  16. linux系统(Centos 7)部署环境记录(显卡驱动、CUDA、CuDnn和conda环境安装)
  17. 2008年度LINUX与UNIX SHELL编程指北系列大片
  18. 记账软件怎么设置着色,收支明细添加颜色
  19. 快速查询出物流信息,统计已签收/未签收各多少
  20. 标准word行间距格式

热门文章

  1. Gstreamer之video转码(七)
  2. Mac升级emacs26
  3. C标准预定义实用的宏
  4. nginx之反向代理配置
  5. Vmware之锁定文件失败
  6. opencv用python进行物体识别_教你用Python+opencv来识别物体的轮廓并标识显示
  7. linux动态库路径生效,Linux下如何解决动态库的链接问题
  8. 如何导入gradle版本不同的Android项目
  9. linux ape,linux把ape+cue格式转换成flac,同时保留曲目信息转载
  10. python程序初学者计算器界面_Python初学者,一个简单的计算器程序的数学函数