你所不知道的getResource()在maven下的黑洞!

原創(chuàng)不易,轉載請標明地址,或者直接附上我的博客首頁https://georgedage.blog.csdn.net/ ,當然最好私信一下,謝謝。

getResource接受一個字符串參數,如果以”/”開頭,就在classpath根目錄下找(不會遞歸查找子目錄),如果不以”/”開頭,就在調用getResource的字節(jié)碼對象所在目錄下找(同樣不會遞歸查找子目錄)。

光說不練,不行滴。上代碼:

非maven結構

image
image.gif

?

package com.jd.search;

public class Test {
    public static void main(String[] args) {
        System.out.println(Test.class.getResource(""));
        System.out.println(Test.class.getResource("/"));
        System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

        System.out.println(Test.class.getResource("george.class"));
        System.out.println(Test.class.getResource("/george.class"));
        System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");

        System.out.println(Test.class.getResource("dictionary.txt"));
        System.out.println(Test.class.getResource("/dictionary.txt"));
        System.out.println("**********************************");

        System.out.println(Test.class.getResourceAsStream("/"));
        System.out.println(Test.class.getResourceAsStream("/dictionary.txt"));
    }
}

image.gif

結果展示:

image
image.gif

?

【友情提醒】

這里做出建議,如果你不太好記住這個規(guī)則,就在進行加載路徑時,進行一次輸出,或者提前進行一個類似的小demo測試。免得¥,你懂得?。?!

當然,本篇博客重點不是說這個,這個大家都懂,說的是,getResource()在maven下的黑洞!

期初用maven建了這個項目,就是去手寫一個分詞器。

然后呢?發(fā)現怎么搞都是空指針,空指針一個常見,也比較好解決的問題,然后我就進行了測試,最終發(fā)現了這個問題,寫出來,以防各位,日后掉坑。


Maven結構

image
image.gif

?

代碼:

package com.jd.search;

public class Test {
    public static void main(String[] args) {
        System.out.println(Test.class.getResource(""));
        System.out.println(Test.class.getResource("/"));
        System.out.println(Test.class.getResource("george.class"));
        System.out.println(Test.class.getResource("/george.class"));
        System.out.println(Test.class.getResource("dictionary.txt"));
        System.out.println(Test.class.getResource("/dictionary.txt"));

        System.out.println(Test.class.getResourceAsStream("/"));
        System.out.println(Test.class.getResourceAsStream("/dictionary.txt"));
    }
}

image.gif

結果展示:

image
image.gif

?

有心的可以將兩次記過進行對比,或者自己敲一下demo。

這里為了方便大家。請看:上面的是非maven結構,下面的是maven結構:

image
image.gif

?


為什么會出現這樣的問題?

我將其歸結為maven項目的運行機制導致的。這一點相信你仔細觀察路徑后也能發(fā)現。

還不是很了解的,或者有比較好的了解的,歡迎留言!

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容