一、问题和现象
首先看一下,项目结构,以及需要读取的图片文件位置,绿色的为java类以及图片文件
读取代码,直接这样读取文件运行,可以吗?
public static void main(String[] args) { URL resource = CalculatorSelf.class.getResource("IconImage.png"); System.out.println(resource); }
答案是否定的,我们看到运行结构是null,说明没有读取成功
二、解决办法
1、先不传参数,执行一下方法
public static void main(String[] args) { URL resource = CalculatorSelf.class.getResource(""); System.out.println(resource); }
运行结果如下:
我们发现这个路径是java类所在的目录路径,并且他读取的是target,那我们直接看一下target
2、再试一下传 /,执行一下方法
public static void main(String[] args) { URL resource = CalculatorSelf.class.getResource("/"); System.out.println(resource); }
运行结果是这样的:
此时路径到了classes目录,而我们所需要的图片文件正好就在classes目录下,所以可以写成
public static void main(String[] args) { URL resource = CalculatorSelf.class.getResource("/IconImage.png"); System.out.println(resource); }
这样就读到了图片文件
三、总结
上面说了这么多,可能有的同学终于被说蒙了,没事,最后我总结一下。
先找到根目录,直接这样写即可:class.getResource(“/”) ,然后打开编译出来的target目录,依次往里面找,每经过一个目录就加到 "/"后面,比如:将上面例子中的图片文件移到esmapper文件夹下面,那么此时
代码应该写成:
URL resource = CalculatorSelf.class.getResource("/esmapper/IconImage.png"); System.ou