理解根目錄,getClass().getResourceAsStream和getClass().getClassLoader().getResourceAsStream的區別
阿新 • • 發佈:2018-12-12
1理解根目錄:
經常會看到如下配置:
<value>classpath*:/application.properties</value>
<value>classpath:/application.properties</value>
這裡的classpath怎麼理解呢,其實指的就是根目錄,關於根目錄,需要了解:
1、src不是classpath, WEB-INF/classes,lib才是classpath,WEB-INF/ 是資源目錄, 客戶端不能直接訪問。
2、WEB-INF/classes目錄存放src目錄java檔案編譯之後的class檔案、xml、properties等資源配置檔案,這是一個定位資源的入口。
3、引用classpath路徑下的檔案,只需在檔名前加classpath:
<param-value>classpath:applicationContext-*.xml</param-value>
<!-- 引用其子目錄下的檔案,如 -->
<param-value>classpath:context/conf/controller.xml</param-value>
4、lib和classes同屬classpath,兩者的訪問優先順序為: lib>classes。
5、classpath 和 classpath* 區別:
classpath:只會到你的class路徑中查詢找檔案;
classpath*:不僅包含class路徑,還包括jar檔案中(class路徑)進行查詢。
2getClass().getResourceAsStream和getClass().getClassLoader().getResourceAsStream的區別
檔案結構如下圖:
途中有兩個配置檔案,biabc.properties和abc.properties;Test類讀取方式如下:
public void readProperty(){ //從當前類所在包下載入指定名稱的檔案,getClass是到當前列 InputStream in = this.getClass().getResourceAsStream("biabc.properties"); // 從classpath根目錄下載入指定名稱的檔案,這是因為/即代表根目錄 // InputStream in = this.getClass().getResourceAsStream("/abc.properties"); //從classpath根目錄下載入指定名稱的檔案,這是因為getClassLoader就會到根目錄上 // InputStream in = this.getClass().getClassLoader().getResourceAsStream("abc.properties"); Properties properties = new Properties(); // 使用properties物件載入輸入流 try { properties.load(in); } catch (IOException e) { e.printStackTrace(); } //獲取key對應的value值 System.out.println(properties.getProperty( "a")); }
借鑑;https://blog.csdn.net/javaloveiphone/article/details/51994268