资源文件指的是在程序中需要使用到的图像文件、声音文件以及二进制数据文件等。java程序中通常这些资源文件会放在.class文件的上下级目录中,可以使用Class类提供了getResource("")、getResourceAsStream("")这两个方法来获取资源文件。由于使用IDE(这里使用Eclipse)运行程序与使用jar包运行程序时这两个方法返回的结果可能不同,本文主要记录了以这两种方式运行程序时获取资源文件的情况。
(附:项目的包层次结构如下)
对于图像、声音这类资源文件,可以使用getResource("")方法,具体如下(资源文件名为about.gif):
- 当资源文件放在ResourceFile.class文件的同级目录中时:
this.getClass().getResource("./about.gif"); //eclipse中运行可以找到该资源文件;jar包运行找不到该资源文件
this.getClass().getResource("about.gif"); //eclipse中运行可以找到该资源文件;jar包运行可以找到该资源文件
this.getClass().getResource("/resourceFileTest/about.gif"); //eclipse中运行可以找到该资源文件;jar包运行可以找到该资源文件
- 当资源文件放在ResourceFile.class文件的下一级目录中时(下一级目录名为nextDirectory):
this.getClass().getResource("./nextDirectory/about.gif"); //eclipse中运行可以找到该资源文件;jar包运行找不到该资源文件
this.getClass().getResource("nextDirectory/about.gif"); //eclipse中运行可以找到该资源文件;jar包运行可以找到该资源文件
this.getClass().getResource("/resourceFileTest/nextDirectory/about.gif"); //eclipse中运行可以找到该资源文件;jar包运行可以找到该资源文件
- 当资源文件放在ResourceFile.class文件的上一级目录中时:
this.getClass().getResource("../about.gif"); //eclipse中运行可以找到该资源文件;jar包运行找不到该资源文件
this.getClass().getResource("/about.gif"); //eclipse中运行可以找到该资源文件;jar包运行可以找到该资源文件
综上,结合API文档可以发现,当getResource方法的参数以"/"开头时,其路径为.class文件所在的根目录;而以参数"."开头的写法不推荐使用。
对于二进制数据文件,可以使用getResourceAsStream("")方法,其结果应该与getResource("")类似,这里就不再详述了。