springboot读取linux文件_SpringBoot 读取文件代码模版
引言
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 读取文件代码模版相关推荐
- python连接linux服务器读取txt文件_python 读取Linux服务器上的文件方法
使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hos ...
- springboot读取linux文件_SpringBoot读取Resource下文件的几种方式
最近在项目中涉及到Excle的导入功能,通常是我们定义完模板供用户下载,用户按照模板填写完后上传:这里待下载模板位置为resource/excelTemplate/test.xlsx,尝试了四种读取方 ...
- k8s springboot 文件_Springboot整合Spring Cloud Kubernetes读取ConfigMap支持自动刷新配置的教程...
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但 ...
- linux读取内存文件,linux – 使用模块读取内核内存
首先让我先说读任意内核内存是一件棘手的事!并且有很多方法可以做到这一点,它们的复杂程度和灵活性各不相同. 1)硬编码地址. 在内核版本的System.map文件中搜索它: # grep sys_cal ...
- Linux不能读取目录,关于Linux上面无法读取资源目录下文件的问题
一开始我的代码是这样子的,读取本地子路径下的json文件 代码运行的时候,在window是可以正常的 @Override public String getBannerStr() { String s ...
- SpringBoot yml文件数据读取
读取配置数据 使用 @Value注解 使用 @Value("表达式") 注解可以从配合文件中读取数据,注解中用于读取属性名引用方式是:${一级属性名.二级属性名--} 我们可以在 ...
- linux读苹果格式文件,mac os 如何读取 Linux ext4 格式的硬盘
mac os 如何读取 Linux ext4 格式的硬盘 很多时候需要在macOS上操作Linux的ext4分区,然后macOS系统默认并不支持ext4等分区格式.而MacOS并不支持读取这个格式的文 ...
- python代码读取文件并将文件反序存入另外一个文件
python代码读取文件并将文件反序存入另外一个文件 #data[::-1] 实现了反转(reverse) #python代码读取文件并将文件反序存入另外一个文件 # Open the file in ...
- python从文件中读取数据_使用Python脚本从文件读取数据代码实例
这篇文章主要介绍了使用Python脚本从文件读取数据代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近自学Python的进度比较慢,工作之 ...
最新文章
- C++程序中常用的sprintf
- python 模糊匹配 合并_Python Pandas模糊合并/匹配重复
- android的签名问题
- HDU - 4856 Tunnels(哈密顿路径+状压dp)
- ASP.NET Core Razor 视图预编译、动态编译
- Android中发现蓝牙设备的广播是,Android 蓝牙设备的查找和连接
- 2018北京ICPC H. Approximate Matching(AC自动机+DP)
- Android 6.0 sensor 框架详解 (application层)
- Hive的概述、流程和优化
- 非标自动化设计全过程,建议收藏
- 简单易懂的方式去看C语言精华--指针
- 手机管理应用研究【4】—— 手机加速篇
- Coding and Paper Letter(三十)
- 游戏手柄(JoyStick)编程控制的一个简单代码(Qt)
- Android 网络图片,gif 下载并保存到相册
- linux系统(Centos 7)部署环境记录(显卡驱动、CUDA、CuDnn和conda环境安装)
- 2008年度LINUX与UNIX SHELL编程指北系列大片
- 记账软件怎么设置着色,收支明细添加颜色
- 快速查询出物流信息,统计已签收/未签收各多少
- 标准word行间距格式
热门文章
- Gstreamer之video转码(七)
- Mac升级emacs26
- C标准预定义实用的宏
- nginx之反向代理配置
- Vmware之锁定文件失败
- opencv用python进行物体识别_教你用Python+opencv来识别物体的轮廓并标识显示
- linux动态库路径生效,Linux下如何解决动态库的链接问题
- 如何导入gradle版本不同的Android项目
- linux ape,linux把ape+cue格式转换成flac,同时保留曲目信息转载
- python程序初学者计算器界面_Python初学者,一个简单的计算器程序的数学函数