这两个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