最近写些小的 java 项目先用 resources 目录来存放一些资源文件,有些是正式环境的资源如 log4j 等配置,有些是junit测试环境,比如测试用的图片资源等。
如下以测试环境为例,进行说明。
[坑位说明]
正常情况下,本人默认会认为 resources 目录默认为资源目录,目录结构如下图:
因此使用如下代码进行默认访问:
File file = new File("1.png");
...
但这时候不能正常访问到该文件,因此只能另寻它法。
[坑位分析]
因此尝试了
// 下面位置在 D:\workspace\project1\out\test\classes
File file = new File(MainTest.class.getResource("/").getPath());
// 下面位置在 D:\workspace\project1\out\test\classes
File file1 = new File(MainTest.class.getClassLoader().getResource(".").getPath());
// 下面位置为空
File file2 = new File(MainTest.class.getClassLoader().getResource("/").getPath());
// 下面位置在 D:\workspace\project1\out\test\resources\1.png
File file3 = new File(MainTest.class.getClassLoader().getResource("1.png").getPath());
因此进入到 out\test目录下看看,发现 classes 和 resources 目录同时存在,这时候明白了,原来是资源文件和classes是分开存放的。
最后发现通过最后那种方式才能正确的取出文件。
[填坑步骤]
最后图之后简便,简单封装个方法吧。
private static final File getResource(String file) {
return new File(VisionEngine.class.getClassLoader().getResource(file).getPath());
}
注意下,确认 test/resources 目录为 [test/resources] --右键--> [Mark Directory as] -->[Test Resources Root]。