方式一: this.getClass().getClassLoader().getResourceAsStream(String name)
首先呼叫物件的getClass()方法是獲得物件當前的型別別,這部分資料存在方法區,而后在型別別上呼叫getClassLoader()方法是得到當前型別的類加載器,我們知道在Java中所有的類都是通過加載器加載到虛擬機中的,而且類加載器之間存在父子關系,就是子知道父,父不知道子,這樣不同的子加載的型別之間是無法訪問的(雖然它們都被放在方法區中),所以在這里通過當前類的加載器來加載資源也就是保證是和型別別同一個加載器加載的,最后呼叫類加載器的getResourceAsStream()方法來加載資源,
這里的 name 不能帶“/”,否則會拋空指標
方式二: this.class.getResourceAsStream(String name)
若name不以“/”開頭時,默認是從此類所在的包下取資源;以“/”開頭時,則是從classpath根下獲取,
示例

如果maven專案打成 jar包不要使用 xxx.calss.getResource(path)或 xxx.calss.getClassLoader().getResource(path) 獲取相應的資源檔案,會報錯,盡量使用stream流的方式操作資源檔案
擴展: spring中classpath的理解
maven專案編譯后,java檔案會被編譯成class檔案放在classes檔案夾下;resource下的資源檔案也會被放到classes檔案夾下,

本文部分轉自:https://www.cnblogs.com/yadongliang/p/7920053.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/171235.html
標籤:Java
上一篇:面試官跟我說rm洗掉檔案之后,空間就被釋放了嗎?我該怎么答
下一篇:java實作分頁查詢
