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)。