Class.getResource与Class.getClassLoader.getResource

 这两个getResource()是使用当前ClassLoader加载资源(即资源在 Class path中),这样资源和class直接打在jar包中,避免文件路径问题. spa

二者不一样是Class的getResource()方法是从当前.class文件路径查找资源,ClassLoader则是从jar包根目录查找. code

Class.getResource(String path)
path不以’/'开头时,默认是今后类所在的包下取资源;
path  以’/'开头时,则是从ClassPath根下获取;ip

package testpackage;
public class TestMain {
    public static void main(String[] args) {
        System.out.println(TestMain.class.getResource(""));
        System.out.println(TestMain.class.getResource("/"));
    }
}

输出结果:资源

file:/E:/workspace/Test/bin/testpackage/
file:/E:/workspace/Test/bin/

上面说到的【path以’/'开头时,则是从ClassPath根下获取;】在这里就是至关于bin目录(Eclipse环境下)。get

Class.getClassLoader().getResource(String path)
path不能以’/'开头时;
path是从ClassPath根下获取;class

package testpackage;
public class TestMain {
    public static void main(String[] args) {
        TestMain t = new TestMain();
        System.out.println(t.getClass());
        System.out.println(t.getClass().getClassLoader());
        System.out.println(t.getClass().getClassLoader().getResource(""));
        System.out.println(t.getClass().getClassLoader().getResource("/"));//null
    }
}

输出结果:test

class testpackage.TestMain
sun.misc.Launcher$AppClassLoader@1fb8ee3
file:/E:/workspace/Test/bin/
null

一样效果cli

com.explorers.Test.class.getResourceAsStream("abc.jpg")
= com.explorers.Test.class.getResourceAsStream("/com/explorers/abc.jpg")
= ClassLoader.getResourceAsStream("com/explorers/abc.jpg")file

相关文章
相关标签/搜索