最近做一个项目,直接在Resource目录下放了一个test.png文件,在读取时的代码如下:
1 File testFile = ResourceUtils.getFile("classpath:test.png");
在idea中调试时是没有问题的,于是提交代码,发布服务等等操作,于是收到测试同事反馈回来的功能异常,查看日志,发现有大量的异常堆栈,看了下是test.png文件读取失败导致的空指针异常的问题。
通过网上搜索才知道问题的根源所在,原来如果是war包时,tomcat是会解压成文件系统的文件的,这么使用是没有问题的,但是因为我们这个是使用的SpringBoot,直接打成jar包运行的,test.png文件只是jar包里面的资源文件,是不能去读取文件路径来访问的,网上的解决的方法有多种办法,基本上是通过classLoader.getResourceAsStream来读取的,但是Spring框架自己提供了一个ClassPathResource类,这个类是专门用于处理这种路径问题的,其使用也非常方便,修改后的代码如下:
1 String fileName = "test.png"; 2 ClassPathResource rs = new ClassPathResource(fileName); 3 InputStream testStream = rs.getInputStream();