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("path") 和class.getResourceAsStream("path")的区别
class.getClassLoader().getResourceAsStream("")
class.getClassLoader().getResourceAsStream("path") 和class.getResourceAsStream("path")的区别

如果是在SRC 下,可以用第一种方式,如果是在WEB环境下,用/WEB-INF/classes/xxx.file 应该是可以的,但是这个我没有试过。

补充:

JAVA中类的加载器:一共有三种加载器

  1. bootstrap classloader :负责加载JAVA核心类( jre 下lib和class目录中的内容)
  2. extension classloader :负责加载JAVA扩展类(jre 下lib/ext 目录中的内容)
  3. system classloader :负责加载应用指定的类 (环境变量classpath中配置的内容)