小知识Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别

来源:互联网 发布:精准扶贫大数据平台app 编辑:程序博客网 时间:2024/06/07 12:15

首先Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。
例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.class.getResourceAsStream(“name”) 会在com.test.mycode包下查找相应的资源。
如果这个name是以 ‘/’ 开头的,那么就会从classpath的根路径下开始查找。

ClassLoader.getResourceAsStream() 无论要查找的资源前面是否带’/’ 都会从classpath的根路径下查找。
所以: MyTest.getClassLoader().getResourceAsStream(“name”) 和
MyTest.getClassLoader().getResourceAsStream(“name”) 的效果是一样的。

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

  2. Class.getClassLoader.getResourceAsStream(String path) :
    默认则是从ClassPath根下获取,path不能以’/’开头,最终是由ClassLoader获取资源。

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

阅读全文
0 0
原创粉丝点击