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

spring项目打jar包运行,读取资源文件失败

操作:

在项目resouces目录下存放文件,然后在代码中尝试获取,代码如下:

ClassPathResource resource = new ClassPathResource("XXX.cfg");
File file = resource.getFile();
复制代码

问题:

执行jar,项目运行,调用的时候会抛出如下异常:

Caused by: java.io.FileNotFoundException: class path resource [XXX.cfg] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/D:/sunmnet/JetBrains/workspace/xxx/target/xxx-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/XXX.cfg
        at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:215) ~[spring-core-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
        at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:53) ~[spring-core-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
        at hello.whz.Application.lambda$lookup$0(Application.java:30) [classes!/:1.0-SNAPSHOT]
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:732) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
        ... 14 common frames omitted
复制代码

原因:

项目打成jar包后,资源文件也存在于jar包中,文件的绝对路径是jar:file:/D:/sunmnet/JetBrains/workspace/xxx/target/xxx-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/XXX.cfg但在运行过程中,spring是不允许直接访问jar包内的文件的,所以会报错。

解决:

采用读取流的方式访问文件:

ClassPathResource resource = new ClassPathResource("application.yml");
InputStream inputStream = resource.getInputStream();
复制代码

转载于:https://juejin.im/post/5c964c9ff265da60d2409add

相关文章:

  • 深度辨析 Python 的 eval() 与 exec()
  • 这题不会!别说你懂值传递与引用传递
  • 换芯 Edge 的新截图曝光,看起来更像 Chrome 了?
  • 如何阅读Java源码?
  • 腾讯云详解宕机故障:光纤挖断后的150秒
  • 【面试准备·3】网络相关
  • Linux基础(第二周)
  • java 企业门户网站 源码 自适应响应式 freemarker 静态引擎 html5 SSM
  • 搭建nonde项目结构
  • 简单封装的ajax请求
  • MySQL学习【第十三篇日志管理】
  • BootStrap基础知识
  • Shiro原理解析(三)--再谈过滤器
  • mysql-python安装时EnvironmentError: mysql_config not found
  • 蚂蚁金服开源服务注册中心 SOFARegistry | SOFA 开源一周年献礼
  • Android 架构优化~MVP 架构改造
  • ES6 ...操作符
  • gcc介绍及安装
  • Javascript弹出层-初探
  • js操作时间(持续更新)
  • LeetCode29.两数相除 JavaScript
  • magento 货币换算
  • MYSQL 的 IF 函数
  • php的插入排序,通过双层for循环
  • Python进阶细节
  • Python中eval与exec的使用及区别
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue学习第二天
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 免费小说阅读小程序
  • 如何进阶一名有竞争力的程序员?
  • 学习使用ExpressJS 4.0中的新Router
  • 怎么把视频里的音乐提取出来
  • Java数据解析之JSON
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 进程与线程(三)——进程/线程间通信
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #laravel 通过手动安装依赖PHPExcel#
  • #Z0458. 树的中心2
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (六)c52学习之旅-独立按键
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net和php怎么连接,php和apache之间如何连接
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @RequestMapping处理请求异常
  • @在php中起什么作用?