Java中jar包獲取資源文件的方式


方式一:  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM