日常踩坑_jar包读取不到资源文件

背景提要

之前不是为了导出word使用了一个WordUtil工具类嘛,这个工具类中需要一个资源文件css,然后就将该资源文件放在了WordUtil同包下的resources文件夹下
然后使用 BufferedInputStream bufferedInputStream = (BufferedInputStream) Resources.getResource("css/quill.core.css").getContent();来获取到css文件
这一切到这里还相当美好,因为本地导出正常,富文本也在生效
但是! 但是当被打成jar包发布到线上后,一切都不一样了/(ㄒoㄒ)/~~
word无法导出,原因是找不到css文件

先说结论

即便是资源信息也被打包到了jar包里,根据Resources.getResource也无法查找到资源文件
正确方式是让类加载器去找,然后我就把上面那句代码改换为了下面这句:
BufferedInputStream bufferedInputStream =(BufferedInputStream) this.getClass().getClassLoader().getResourceAsStream("css/quill.core.css")
本地依旧是风和日丽,你好我好的一片完美景象
但是!但是jar包运行的时候,又又又又报错了,还好这次的报错信息just只是类型转换的错误
ZipInflaterInputStream cannot be cast to java.io.BufferedInputStream,报了一个这个的错,好嘛,不能强转
看了一下ZipInflaterInputStream 和 BufferedInputStream都是InputStream的子类,那就取消强转
来了,最终版本:
InputStream bufferedInputStream = this.getClass().getClassLoader().getResourceAsStream("css/quill.core.css");

原因:

getResource() 方法的获取范围仅限于 指定的范围classpath,classpath 之外的资源是无法获取到的。
而 jar 是被我们包含在 classpath 中的
所以这类资源一般是存在于 classpath 中的文件
我们可以使用上面的 getResource()方法获取到其路径,(通常样式是资源所在文件的路径+资源在文件中的路径)但是没有办法直接通过文件读取到。
但是可以通过 classLoader 对象中的 getResourceAsStream()方法获取到资源的输入流。
通过 getResourceAsStream() 方法获取资源的输入流实际上是通过 URL 对象,通过 openStream()方法打开的,因此我们只需要拿到正确的资源URL 地址,就能够获得该类资源的输入流了。

参考文章

这个认真看比较好懂:

跳坑结束,祝你快乐!

Original: https://www.cnblogs.com/deanCopy/p/16398037.html
Author: Dean_001
Title: 日常踩坑_jar包读取不到资源文件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/714931/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [转]winscp以命令行方式同步服务器数据到PC机磁盘上

    博客地址:http://www.cnblogs.com/wolf-sun/ 博客版权:如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐…

    技术杂谈 2023年6月1日
    0103
  • PWN学习总结

    一、栈溢出原理 什么是栈溢出?栈溢出就是缓冲区溢出的一种。 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分…

    技术杂谈 2023年7月11日
    078
  • Docker概述(一)

    Docker概述(一) 顺便介绍下:我们是一家致力于智能语音交互的AI公司,我们提供了语音识别、语音合成、声纹识别、声音复刻、声音转换等技术产品供小伙伴们测试调用,感兴趣的,第三部…

    技术杂谈 2023年7月24日
    0108
  • 如何在Linux快速搭建一套ADB环境

    一、ADB简介 1.什么是ADB Android Debug Bridge,安卓调试桥,它借助adb.exe(Android SDK安装目录platform-tools下),用于电…

    技术杂谈 2023年7月25日
    082
  • 每天一个 HTTP 状态码 201

    201 Created 表示请求成功,在服务器端创建了一个新资源… 201 Created 201 Created 表示客户端的请求已经成功完成,结果是创建了一个新资源…

    技术杂谈 2023年7月11日
    0113
  • vue解决dhtmlx-gantt在element的tab切换时显示不正确问题

    项目上使用了dhtmlx-gantt甘特图插件,发现不放置于el-tab-pane页签的情况下能正常渲染甘特图,但放在el-tab-pane页签容器的情况下则不能正常渲染,具体表现…

    技术杂谈 2023年6月1日
    0110
  • nginx安装配置步骤

    ​ yum install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel -y [root@n…

    技术杂谈 2023年7月11日
    076
  • canvas/CSS仪表盘效果

    兼容写法: <span class="hljs-built_in">window.requestAnimFrame = (<span clas…

    技术杂谈 2023年5月31日
    090
  • FineUIPro/Mvc/Core v7.1.0 正式发布了!

    FineUIPro/Mvc/Core v7.1.0 正式发布了,这个版本支持了多文件上传,WebForms版修正了一个通杀.Net Framework的XSS漏洞,基础版也第一次支…

    技术杂谈 2023年6月1日
    092
  • 普通module如何使用@Test测试

    问题 对于一个 maven工程来说,使用@Test注解来测试只需要在 pom.xml中引入test的依赖即可。但是对于一个普通的 module那又怎么使用呢? 最方便的就是 alt…

    技术杂谈 2023年7月25日
    064
  • 分布式Session如何存储

    使用Tomcat+Redis 我们可以在Tomcat的配置文件中进行设置,设置成功之后,Tomcat会将Session存储到Redis中,这样我们访问不通的Tomcat时,可以保证…

    技术杂谈 2023年6月21日
    090
  • 3.一元线性回归

    线性回归分析(Linear Regression Analysis)是确定两种或两种以上 变量间相互依赖的定量关系的一种 统计分析方法。对于一元线性回归而言,其模型主要假设为: […

    技术杂谈 2023年7月10日
    047
  • Mall谷粒商城(基础篇的开发)

    项目简介 Mall商城项目致力于打造一个完整的大型分布式架构的电商平台,采用先阶段流行的前后端分离模式编写。 Mall商城是一套电商项目,包括前台的商城系统以及后台管理系统,基于S…

    技术杂谈 2023年7月11日
    0113
  • 陈宏申:浅谈京东电商商品文案挖掘难点与优化实践

    导读: 在电商推荐中,除了推送商品的图片和价格信息外,文案也是商品非常重要的维度。基于编码器解码器范式的序列文本生成模型是文案挖掘的核心,但该种方法面临着两大技术挑战:一是文案生成…

    技术杂谈 2023年7月25日
    067
  • python安装各种库的镜像

    让python pip使用国内镜像#国内源:#清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:https://mirrors.ali…

    技术杂谈 2023年7月24日
    074
  • 基于Vue cli生成的Vue项目的webpack4升级

    前面的话 本文将详细介绍从webpack3到webpack4的升级过程 相比于webpack3,webpack4可以零配置运行,打包速度比之前提高了90%,可以直接到ES6的代码进…

    技术杂谈 2023年5月31日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球