原創(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ā)現。
還不是很了解的,或者有比較好的了解的,歡迎留言!