首先,Java中的getResourceAsStream獲取項目下的指定資源有以下幾種:
一:獲取src下的指定資源
- 通過Class.getResource 來獲取。 path 不以’/'開頭時默認是從此類所在的包下取資源,以’/'開頭則是從ClassPath根下(即'/'代表src)獲取。其只是通過path構造一個絕對路徑,最終還是由ClassLoader獲取資源
//必須要從根節點進行獲取,即以/ 開頭 TempMain.class.getResource("/application.yml");
- Class.getResourceAsStream 與Class.getResource 一樣,只是將獲取到的URL 進行了流的處理
TempMain.class.getResourceAsStream("/application.yml");
- Class.getClassLoader.getResourceAsStream(String path) :默認則是從ClassPath根下獲取,path不能以’/'開頭,最終是由ClassLoader獲取資源。
TempMain.class.getClassLoader().getResourceAsStream("application.yml");
二:獲取web項目下的指定資源
1)、 ServletContext. getResourceAsStream(String path):默認從WebAPP根目錄(即:要發佈在服務器下的項目的根目錄(與src同級的web文件夾下))下取資源,path是否以’/'開頭無所謂;
A)、在web項目的根目錄下有myfile.xml文件,則應該使用:
getServleContext().getResourceAsStream("myfile.xml");
2)、Jsp下的application內置對象就是上面的ServletContext的一種實現
三 獲取指定包下的所有class類
需要先將包名轉化爲路徑名,比如講org.apache 轉換爲 org/apache ,然後通過循環遍歷找到該文件下有哪些類,然後在將路徑名轉化爲類名,通過反射即可拿到。
或者通過第一步獲取到了資源文件 , 然後通過解析資源文件, 獲取到對應的ClassName ,然後通過反射來實現 。 (可以使用Spring 中的 ClassReader )
四 獲取jar包裏的class文件
先通過第一種方法獲取到對應的jar文件,然後通過
JarFile jarFile = new JarFile(file)
獲取到jarFile,接着通過第三部即可