您的位置:首页 > 其它

Class.getResourceAsStream和ClassLoader.getResourceAsStream

2013-08-27 20:05 183 查看

首先粘取二者的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
- 如果
name 是 null 从以下版本开始: 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的绝对路径。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐