`

Class和ClassLoader的getResourceAsStream区别

    博客分类:
  • Java
阅读更多

在使用Class.getResourceAsStream时,资源路径有两种方式,一种以 / 开头,则这样的路径是指定绝对
路径,如果不以 / 开头,则路径是相对与这个class所在的包的。

 

在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径。

举例,下面的三个语句,实际结果是一样的:
com.app.Test.class.getResourceAsStream("abc.jpg")
= com.app.Test.class.getResourceAsStream("/com/app/abc.jpg")
= ClassLoader.getResourceAsStream("com/app/abc.jpg")

 

1. Class.getResourceAsStream(String path):path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。

2. Class.getClassLoader.getResourceAsStream(String path):默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。(// 此加载方式可以'./*'前缀或无,但不能'/*'开头)

3. ServletContext.getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓,当然这和具体的容器实现有关。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics