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

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

1、问题情况如下:

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

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

java.io.FileNotFoundException: 
    class path resource [db/aixing.db] cannot be resolved to 
    absolute file path because it does not reside in the file system:
    jar:file:/C:/Users/office/Desktop/card_active-0.0.1-SNAPSHOT.jar!/
    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()可以动态获取资源的文件流。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值