Java中取資源時,經常用到Class.getResource和ClassLoader.getResource讀取resources文件夾下的文件
1 示例
通常工程結構如下:
工程結構
package wusj.ResourceFileTest;
public class App
{
public static void main( String[] args )
{
/*********方法1 通過ClassLoader.getResource()讀取********/
ClassLoader classLoader = App.class.getClassLoader();
//得到的路徑是classpath
System.out.println(classLoader.getResource("").toString());
//讀取abc.txt
System.out.println(classLoader.getResource("abc.txt").toString());
System.out.println();
/********方法2 通過class.getResource()讀取*********/
//得到的路徑是classpath
System.out.println(App.class.getResource("/").toString());
//得到當前類所在文件夾
System.out.println(App.class.getResource("").toString());
//讀取classpath下的abc.txt,必須加/,否則會定位到當前類所在文件夾
System.out.println(App.class.getResource("/abc.txt").toString());
//讀取當前類所在文件夾下的resources/def.txt
System.out.println(App.class.getResource("resources/def.txt").toString());
}
}
運行結果
2 兩者的區別
- Class.getResource(String path)
path 不以’/'開頭時,默認是從此類所在的包下取資源;
path 以’/'開頭時,則是從classpath根下獲取;
- Class.getClassLoader().getResource(String path)
path不能以’/'開頭時;
path是從classpath根下獲取;
如果想獲取classpath(在這里是指file:/E:/wusj/workspace-per/ResourceFileTest/target/classes/)下的資源,可以使用Class.getResource(String path)或者Class.getClassLoader().getResource(String path);如果是獲取位于某個包下的資源,則使用Class.getResource(String path)。