补充:

第一种情况:

当我们自己写的资源文件放在一个包下时,引入的第三方jar包的资源文件放在一个包下时,由于一般包的命名是不会重复的,所以在使用绝对路径时我们获取资源文件不会出错。

如下:

这个ex_c3p0-config.xml资源文件是我们自己创建的,在at.flying.dwr.spring.xml包下:

getresource获取路径 get resource_jar包

这个同名的ex_c3p0-config.xml资源文件是引入的第三方jar包的,在at.flying.res包下:

getresource获取路径 get resource_getresource获取路径_02

执行以下测试代码:

@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资源文件时:

getresource获取路径 get resource_xml_03

执行以下测试代码:

@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文件时:

getresource获取路径 get resource_xml_04

再次执行上述代码输出结果如下(黑体字):

url:/D:/WORKSPACE/intelljIdea/SSMProjectMaven/target/classes/dwr-version.properties

这时获取到的dwr-version.properties资源文件是我们自己的而不是第三方jar包的。

 

总结:

当我们自己写的资源文件跟第三方jar包的资源文件在各自的包下时,由于包名一般不同,所以即便资源文件同名我们也能获取到正确的资源文件。

当我们写的资源文件跟第三方jar包的资源文件都在classpath根目录下时,资源文件不同名时我们也可以正确获取到资源文件,但是当资源文件同名时,我们只能获取到自己写的资源文件而不能获取到第三方jar包的同名资源文件,换句话说在这种情况下,我们自己写的资源文件将会覆盖第三方jar包的同名资源文件。