關於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包的同名資源文件。

相關文章
相關標籤/搜索