关于getResource()使用的几个问题

这篇博客够详细:http://blog.csdn.net/ak913/article/details/7399056java

补充:web

第一种状况:spring

当咱们本身写的资源文件放在一个包下时,引入的第三方jar包的资源文件放在一个包下时,因为通常包的命名是不会重复的,因此在使用绝对路径时咱们获取资源文件不会出错。测试

以下:url

这个ex_c3p0-config.xml资源文件是咱们本身建立的,在at.flying.dwr.spring.xml包下:spa

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

执行如下测试代码:code

@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);
    }

输出结果以下(黑体字):xml

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
blog

从输出结果咱们能够看到,各自获取到了正确的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包的同名资源文件。

相关文章
相关标签/搜索