Class.getResourceAsStream和ClassLoader.getResourceAsStream

首先粘取二者的API:

Class类:

getResourceAsStream

public InputStream getResourceAsStream(String name)
查找具有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的 class loader 实现的。此方法委托此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResourceAsStream(java.lang.String)

在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:

  • 如果 name'/' 开始 ('\u002f'),则绝对资源名是 '/' 后面的 name 的一部分。
  • 否则,绝对名具有以下形式:
       modified_package_name/name
    

    其中 modified_package_name 是此对象的包名,该名用 '/' 取代了 '.' ('\u002e')。

参数:
name - 所需资源的名称
返回:
一个 InputStream 对象;如果找不到带有该名称的资源,则返回 null
抛出:
NullPointerException - 如果 namenull
从以下版本开始:
JDK1.1

 

ClassLoader类:

getResourceAsStream

public InputStream getResourceAsStream(String name)
返回读取指定资源的输入流。

getResource(String) 的文档中描述了搜索顺序。

参数:
name - 资源名称
返回:
用于读取资源的输入流,如果无法找到资源,则返回 null
从以下版本开始:
1.1

 

        从API上可以看出,Class也委托了类加载器进行读取资源,只是在对资源的定位上使用了不同的方式;从功能上讲,两个都可以用于从 classpath 里面进行资源读取,  classpath包含classpath中的路径和classpath中的jar。

        两个方法的区别是资源的定义不同,一个主要用于相对与一个对象取资源,而另一个用于取相对于classpath的资源,用的是绝对路径。
        在使用Class.getResourceAsStream 时,资源路径有两种方式:

          1、以 / 开头,则这样的路径是指定绝对路径;

          2、不以 / 开头,则路径是相对与这个class所在的包的。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值