java.io.FileNotFoundException: file:/usr/project/xxx.jar!/BOOT-INF/classes!/conf/xxx问题

       最近在开发登陆认证滑动验证码的时候发现自己之前使用的拼图验证码由于无法获取到预先放置在resources目录下的图片而抛出异常,经过一番调查发现,之前可以使用是因为之前打包成了war包,丢到tomcat中运行会解压,因而实际上图片是实际存在于文件系统的,可以通过java中的文件操作获取目录,并随机取得一张图片

Optional pathOpt = Optional.of(this.getClass()).map(val->val.getResource("/")).map(URL::getPath).map(val->val.replaceAll("classes/", "resources/imgs"));

而现在采用springboot进行开发,打成jar包,因而在通过这种方法,最终会进入jar包里面,通过这种方法就行不通了。

      通过调查发现,在打成jar后运行,此时通过 this.getClass().getResource("")方法无法正确获取文件,不能读取到jar包里的文件,虽然在jar里面对应的class路径下可以看到该文件,但实际上文件是存在于jar这个文件里面的资源文件,在磁盘是没有真实路径的。如果只是读取一个文件,则可以用字节流的方式读取,用 InputStream inputStream=this.getClass().getResourceAsStream(""); 可以正确读取。而InputStream inputStream=this.getClass().getResourceAsStream("")会指定要加载的资源路径与当前类所在包的路径一致,因此能正常读取文件。但若是多个文件,目前我感觉通过字节流的方式是不太好,若各位有新的方法,也可以通过评论告诉我,我也学习一下,哈哈

程序之路漫漫,吾将上下而求索 

你可能感兴趣的:(java,spring,boot)