打成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包看了之后发现有文件。

打成jar包运行之后报错,java.io.FileNotFoundException:(已解决)_第1张图片

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

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

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

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

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

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

5、结果总结

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

你可能感兴趣的:(java学习中问题记录,java,数据库,spring,boot,intellij,idea)