class.getClassLoader().getResourceAsStream("path") 和class.getResourceAsStream("path")的区别
区别
class.getResourceAsStream("")获得的是相对路径
class.getClassLoader().getResourceAsStream("")加载器获得是绝对路径
-
Class.getResourceAsStream(String path) :
path 不以’/‘开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath(Src根目录)根下获取。
其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。 -
Class.getClassLoader.getResourceAsStream(String path) :
默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。 -
ServletContext. getResourceAsStream(String path):
默认从WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓,当然这和具体的容器实现有关。
class.getResourceAsStream("")
class.getClassLoader().getResourceAsStream("")
如果是在SRC 下,可以用第一种方式,如果是在WEB环境下,用/WEB-INF/classes/xxx.file 应该是可以的,但是这个我没有试过。
补充:
JAVA中类的加载器:一共有三种加载器
- bootstrap classloader :负责加载JAVA核心类( jre 下lib和class目录中的内容)
- extension classloader :负责加载JAVA扩展类(jre 下lib/ext 目录中的内容)
- system classloader :负责加载应用指定的类 (环境变量classpath中配置的内容)