classpath的jar包中读取文件

  • 在idea中读取resources下的文件没有问题(调用getFile),但是打成jar包就会出问题;
  • 使用spring的ClassPathResource或者hutool的ClassPathResource去解析文件都会有问题;
  • 但是使用上面两个工具去读取inputstream或者byte就没问题,因为内部都是调用ClassLoader的getResource方法,如果是文件,那么就是file://xxx,如果是jar包那么就会是jar:file://xxx;
  • 因为如果是读取文件,那么路径就是file://xxx,但是在jar包中就不存在这东西,只会存在jar:file://xxx。读取inputstream或者byte最终会被解析成url方式读取(调用url的openStream方法),url方式读取就可以读取到file://xxx或者jar:file://xxx,读取文件就不行
  • 所以遇到这种问题的时候不要试图去读取文件,而是要读取inputstream或者bytes
  • 有3种方式可以实现:1. 手动去使用ClassLoader获取,2. 使用spring的ClassPathResource,3. 使用hutool的ClassPathResource
  • 推荐:hutool的ClassPathResource,因为代码量少,并且不用捕获异常,hutool封装了ResourceUtil,使用getResourceObj或者readBytes方法都可以
  • 注意:文件名前不需要加classpath:,也不用加/这种绝对路径:
    • 错误示范:Resource resource = ResourceUtil.getResourceObj("classpath:/config/a.xlsx");
    • 正确示范:Resource resource = ResourceUtil.getResourceObj("config/a.xlsx");
posted @   神一样的存在  阅读(693)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2021-07-26 UML类图中的符号解释
2014-07-26 Java生产者消费者模型
点击右上角即可分享
微信分享提示