当前位置: 首页 > news >正文

解决在spring boot打成jar包后读取resource下资源文件抛出 java.io.FileNotFoundException

解决在spring boot打成jar包后读取resource下资源文件抛出 java.io.FileNotFoundException

具体报错如下:file:/data/XXX/xxxx.jar.!/BOOT-INF/classes!/configs/xxxxx.xlsx(No such file or directory),

开发环境spring boot2.15
需求:在resource下需要提供一套excel,world格式供前端下载模板

String file = "static/人员基础信息导入模板.xlsx"; BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file)); OutputStream outputStream = response.getOutputStream();

这种读取方式只能在本地运行项目的时候使用,一旦发布项目(打包成jar)在调用这个接口时候会出现file:/data/XXX/xxxx.jar.!/BOOT-INF/classes!/configs/xxxxx.xlsx(No such file or directory);异常

完整代码可以直接使用

@GetMapping("/personnel/downloadTemplate") public void downloadLocal(HttpServletResponse response) throws IOException { /** 获取静态文件的路径 */ String path = "static/人员基础信息导入模板.xlsx"; /** 获取文件的名称 . 用来进行编码*/ String fileName = "人员基础信息导入模板.xlsx"; /** 将文件名称进行编码 */ response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); response.setContentType("content-type:octet-stream"); /* .getClassLoader() 方法是在静态文件路径添加一个/ */ InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(path); OutputStream outputStream = response.getOutputStream(); try { byte[] buffer = new byte[1024]; int len; assert inputStream != null; while ((len = inputStream.read(buffer)) != -1) { /** 将流中内容写出去 .*/ outputStream.write(buffer, 0, len); } }catch (IOException e){ e.printStackTrace(); }finally { assert inputStream != null; inputStream.close(); outputStream.close(); } }

如还有问题可以评论留言!
如果解决了你的问题,请右上角给点个赞。

http://www.jsqmd.com/news/1282245/

相关文章:

  • Slim框架和Freeze old model模型学习百科
  • 2026线槽桥架一站式供应:热浸锌线槽/母线槽定制/PVC线槽直销/镀锌线槽现货/不锈钢桥架定制源头厂家 - 栗子测评
  • 2026唐山黄金回收就来丽坤奢品汇18617962974全国连锁专业靠谱 - 丽坤奢品汇
  • ribbon的搭建
  • 从入门到精通:2026年加水印工具选择指南 - 软件工具教程方法
  • 终极指南:如何免费解锁WeMod完整功能,获得专业版体验
  • DamaiHelper:从手动抢票到智能掌控,你的演唱会门票管家
  • 告别Adobe插件安装烦恼:ZXPInstaller三步拖放搞定.zxp文件
  • 【2024数据治理黄金标准】:用AI自动整理数据替代人工核对——某头部银行降本83%的底层逻辑
  • 如何快速实现Windows 11任务栏歌词:Taskbar-Lyrics完整指南
  • python常用模块
  • activiti的25张表的建立
  • AI自动生成对话树、动画状态机与测试用例:游戏程序员必须掌握的3类Prompt工程范式
  • axure原型的使用
  • 2026 年 7 月水凝胶细胞 3D 培养厂家 TOP5 评测 类器官构建与细胞功能研究全维度对比 - 互联网科技品牌测评
  • 2026地坪漆品牌哪家性价比高?权威测评+场景适配攻略+避坑FAQ大全 - 商业大观
  • 2026 年至今,山东值得关注的圆管膜结构车棚源头厂家哪家好,旧小区搭车棚别再用彩钢瓦,这玩意儿用十年都不塌还能省一半钱-飞扬膜结构车棚 - 企业官方推荐【认证】
  • 挑选自己想要的显示器
  • Netty(一)之helloworld
  • dubbo实战01-入门案例
  • 开源模型成本陷阱全曝光,92%团队踩坑的3类隐性开销(CUDA版本兼容性、KV Cache内存泄漏、Tokenizer序列膨胀)
  • 终极鼠标优化方案:让你的普通鼠标在macOS上超越苹果触控板体验
  • 别把Tg等同于耐温上限!采购PCB板材真实作用
  • 版本的比较(java)
  • LeetCode515. 在每个树行中找最大值
  • for in
  • 2026邢台黄金回收就来丽坤奢品汇18617962974全国连锁专业靠谱 - 丽坤奢品汇
  • 羽毛球 AI 方案选型对比:MediaPipe vs YOLOv8-Pose vs OpenPose 在运动分析场景的精度与延迟评估
  • Netty简介及使用
  • NLTK获取停用词