Class和ClassLoader的getResourceAsStream()方法

本文详细解释了Java中使用Class.getResourceAsStream与ClassLoader.getResourceAsStream两种方法的区别。前者既可以使用相对路径也可以使用绝对路径来加载资源,而后者则只能使用绝对路径。通过具体示例说明了这两种方法在实际应用中的异同。
from:http://blog.youkuaiyun.com/explorers/archive/2007/08/02/1722740.aspx

这两个方法还是略有区别的, 以前一直不加以区分,直到今天发现要写这样的代码的时候运行
错误, 才把这个问题澄清了一下。

基本上,两个都可以用于从 classpath 里面进行资源读取, classpath包含classpath中的路径
和classpath中的jar。

两个方法的区别是资源的定义不同, 一个主要用于相对与一个object取资源,而另一个用于取相对于classpath的
资源,用的是绝对路径。

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

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

举例,下面的三个语句,实际结果是一样的:
com.explorers.Test.class.getResourceAsStream("abc.jpg")
= com.explorers.Test.class.getResourceAsStream("/com/explorers/abc.jpg")
= ClassLoader.getResourceAsStream("com/explorers/abc.jpg")
`class.getResourceAsStream` 方法用于获取指定资源的输入流,资源可以是配置文件、图片等。以下是该方法的使用方式及示例: ### 从当前类所在包路径获取资源 若要从当前类所在包的路径开始匹配获取资源,直接传入资源文件名即可。例如,有一个类 `com.example.MyClass`,在同一包下有一个 `config.properties` 文件,可按如下方式获取其输入流: ```java package com.example; import java.io.InputStream; public class MyClass { public static void main(String[] args) { InputStream inputStream = MyClass.class.getResourceAsStream("config.properties"); if (inputStream != null) { // 处理输入流 } else { System.out.println("资源未找到"); } } } ``` ### 从 classpath 根路径获取资源 若要从 classpath 根路径开始匹配获取资源,需要在资源文件名前加上 `/`。例如,在 classpath 根目录下有一个 `rootConfig.properties` 文件,可按如下方式获取其输入流: ```java package com.example; import java.io.InputStream; public class MyClass { public static void main(String[] args) { InputStream inputStream = MyClass.class.getResourceAsStream("/rootConfig.properties"); if (inputStream != null) { // 处理输入流 } else { System.out.println("资源未找到"); } } } ``` ### 与 ClassLoader.getResourceAsStream 对比 `ClassLoader.getResourceAsStream` 只能从 classpath 根路径开始匹配获取资源,且路径不能以 `/` 开头。例如: ```java package com.example; import java.io.InputStream; public class MyClass { public static void main(String[] args) { InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream("com/example/config.properties"); if (inputStream != null) { // 处理输入流 } else { System.out.println("资源未找到"); } } } ``` ### 注意事项 - 若资源不存在,`getResourceAsStream` 方法将返回 `null`,因此使用前需进行 `null` 检查。 - 资源路径区分大小写,要确保路径文件名的大小写与实际文件一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值