這篇博客夠詳細: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包的同名資源文件。