补充:
第一种情况:
当我们自己写的资源文件放在一个包下时,引入的第三方jar包的资源文件放在一个包下时,由于一般包的命名是不会重复的,所以在使用绝对路径时我们获取资源文件不会出错。
如下:
这个ex_c3p0-config.xml资源文件是我们自己创建的,在at.flying.dwr.spring.xml包下:
这个同名的ex_c3p0-config.xml资源文件是引入的第三方jar包的,在at.flying.res包下:
执行以下测试代码:
@Test
public void test1() {
String url1 = DateConverter.class.getResource("/at/flying/dwr/spring/xml/ex_c3p0-config.xml").getFile();
String url2 = DateConverter.class.getResource("/at/flying/res/ex_c3p0-config.xml").getFile();
System.out.println("url1:" + url1);
System.out.println("url2:" + url2);
}
输出结果如下(黑体字):
url1:/D:/WORKSPACE/intelljIdea/SSMProjectMaven/target/classes/at/flying/dwr/spring/xml/ex_c3p0-config.xml
url2:file:/D:/OpenSource/Maven/repository/at/flying/tools/common-utils/1.0.0-RELEASE/common-utils-1.0.0-RELEASE.jar!/at/flying/res/ex_c3p0-config.xml
从输出结果我们可以看到,各自获取到了正确的ex_c3p0-config.xml资源文件。
第二种情况:
当我们自己写的资源文件在classpath根目录同时引入的第三方jar包的同名资源文件也在classpath根目录时,当我们使用getResource()方法获取该资源文件时会是怎样的呢。
当只有第三方jar包有dwr-version.properties资源文件时:
执行以下测试代码:
@Test
public void test2() {
String url = DateConverter.class.getResource("/dwr-version.properties").getFile();
System.out.println("url:" + url);
}
输出结果如下(黑体字):
url:file:/D:/OpenSource/Maven/repository/org/directwebremoting/dwr/3.0.1-RELEASE/dwr-3.0.1-RELEASE.jar!/dwr-version.properties
从输出结果我们可以看到正确获取到了我们需要的资源文件。
当我们的classpath根目录下也有同名的dwr-version.properties文件时:
再次执行上述代码输出结果如下(黑体字):
url:/D:/WORKSPACE/intelljIdea/SSMProjectMaven/target/classes/dwr-version.properties
这时获取到的dwr-version.properties资源文件是我们自己的而不是第三方jar包的。
总结:
当我们自己写的资源文件跟第三方jar包的资源文件在各自的包下时,由于包名一般不同,所以即便资源文件同名我们也能获取到正确的资源文件。
当我们写的资源文件跟第三方jar包的资源文件都在classpath根目录下时,资源文件不同名时我们也可以正确获取到资源文件,但是当资源文件同名时,我们只能获取到自己写的资源文件而不能获取到第三方jar包的同名资源文件,换句话说在这种情况下,我们自己写的资源文件将会覆盖第三方jar包的同名资源文件。