我所了解的加载资源的几种方式:
如图:
要在ClassLoaderTest类的main方法里面加载资源有一下几种方法:
1:在没改变线程类加载器的情况下,使用线程类加载器加载资源
Thread.currentThread().getContextClassLoader().getResourceAsStream("image/image.txt");
由于我们使用的线程类加载器,所以资源是从classpath路径下加载的。
这里的classpath路径在上图中就是我们所看到的src目录,所以image/image.txt是从classpath下寻找的。
加载test.txt需要参数变为test/im/test.txt
2:使用加载此类的类加载器来加载
ClassLoaderTest t=new ClassLoaderTest();
t.getClass().getClassLoader().getResourceAsStream("image/image.txt");
在和1一样的目录下寻找
3.不需要getClassLoader()这一步
t.getClass().getResourceAsStream("/image/image.txt");
注意:
如果参数改为image/image.txt,默认是从此类所在目录即test目录下加载的这样就加载不到了
反之,则加载目录还是classpath目录
同样的:加载test.txt时我们就方便多了
加载test.txt如下
t.getClass().getResourceAsStream("im/image.txt");
这样就可以了。
因为没有在前面加/,所以是从此类所在包下加载资源的。