• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

打成jar包运行:后报错,java.io.FileNotFoundException:已解决

武飞扬头像
@随心1462
帮助1

今天项目测试时,遇到一个问题,因为第一次遇到,所以记录一下:

1、问题情况如下:

        存放在项目resources目录下的静态资源文件,需要在接口调用时,将其copy到其他文件位置,但是打包后运行,调用时报错FileNotFoundException。

        开发中代码调试没有问题,但是打成jar包之后,在测试服务器运行时就报错,报错情况如下:

  1.  
    java.io.FileNotFoundException:
  2.  
    class path resource [db/aixing.db] cannot be resolved to
  3.  
    absolute file path because it does not reside in the file system:
  4.  
    jar:file:/C:/Users/office/Desktop/card_active-0.0.1-SNAPSHOT.jar!/
  5.  
    BOOT-INF/classes!/db/aixing.db

 2、看到日志后,第一反应是资源文件不存在,打包时没打进去丢失了,但取jar包看了之后发现有文件。

学新通

 3、想了一下之后,发现报错的文件路径不太对

学新通

 为什么多了两个感叹号,个人猜测是打包机制的问题,会造成路径不匹配?(希望了解的朋友指教一二)

4、上网查询之后,找到解决办法。

学新通

这是我获取文件路径方式,这样似乎不对,开发阶段调试没问题,打成jar包运行有错。

InputStream inputStream = CardActiveApplication.class.getClassLoader().getResourceAsStream("db/aixing.db");

 上面是网友提供的获取文件路径方式,尝试之后发现可以

5、结果总结

开发中,编译器会自动将代码和静态资源动态编译到target目录下,在使用时可以通过getfile()读到所需的文件的,但打包后,由于某种原因,getfile()失效了。此时先使用getClassLoader()获取编译后类的相对路径等信息,再使用getResourceAsStream()可以动态获取资源的文件流。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggaika
系列文章
更多 icon
同类精品
更多 icon
继续加载