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