https://cloud.tencent.com/developer/ask/28683markdown
getResourceAsStream()經過classname的類加載器加載文件。若是類來自JAR文件,那麼就會從JAR文件中加載資源。spa
FileInputStream用於從文件系統讀取文件。.net
https://blog.csdn.net/buster2014/article/details/53787224blog
props.load(new FileInputStream("db.properties")); 是讀取當前目錄的db.properties文件ssl
getClass.getResourceAsStream("db.properties"); 是讀取當前類所在位置一塊兒的db.properties文件
資源
getClass.getResourceAsStream("/db.properties"); 是讀取ClassPath的根的db.properties文件,注意ClassPath若是是多個路徑或者jar文件的,只要在任意一個路徑目錄下或者jar文件裏的根下均可以,若是存在於多個路徑下的話,按照ClassPath中的前後順序,使用先找到的,其他忽略.get
Class.getResource和ClassLoader.getResource 最終調用的是ClassLoader 類的getResource方法。只不過Class.getResource是先調用Class 的 getResource 方法,在這個getResource 方法中,再去調用ClassLoader 類的getResource方法it
那麼Class類中的getResource方法作了什麼呢,主要的一句是 name = resolveName(name);
---------------------
做者:張守康
來源:CSDN
原文:https://blog.csdn.net/zhangshk_/article/details/82704010
版權聲明:本文爲博主原創文章,轉載請附上博文連接!io
System.out.println(FingerPrint.class.getResource("")); System.out.println(FingerPrint.class.getClassLoader().getResource("")); System.out.println(FingerPrint.class.getResource("/")); System.out.println(FingerPrint.class.getClassLoader().getResource("/")); System.out.println(FingerPrint.class.getResource("")); System.out.println(FingerPrint.class.getClassLoader().getResource("expire.png")); System.out.println(FingerPrint.class.getResource("/expire.png")); System.out.println(FingerPrint.class.getClassLoader().getResource("/"));
jar:file:/Users/sunyuming/.m2/repository/com/jds/fast/fid-common/1.0.2/fid-common-1.0.2.jar!/com/jds/fid/fid_common/
file:/Users/sunyuming/work/MyTest/target/classes/
file:/Users/sunyuming/work/MyTest/target/classes/
null
jar:file:/Users/sunyuming/.m2/repository/com/jds/fast/fid-common/1.0.2/fid-common-1.0.2.jar!/com/jds/fid/fid_common/
jar:file:/Users/sunyuming/.m2/repository/com/jds/fast/fid-common/1.0.2/fid-common-1.0.2.jar!/expire.png
jar:file:/Users/sunyuming/.m2/repository/com/jds/fast/fid-common/1.0.2/fid-common-1.0.2.jar!/expire.png
nullast
能夠看到,classloader的getResource可能優先在本jar包內尋找,因此若是本jar包resource下也有一個expire.png,就會找錯