getResourceAsStream(String name)查找资源

本文对比分析了Class.getResourceAsStream与ClassLoader.getResourceAsStream两种Java资源加载方法的区别。详细解释了使用这两种方法时路径配置的不同之处,尤其是在处理绝对路径时的特殊考虑。

chad

2009318

 

一直习惯于用 Class.getResourceAsStream(String path),这个方法支持以绝对路径或相对路径寻找资源。如下:

com.test.Test.class.getResourceAsStream("resource.properties"),这是相对于当前类的所在包去查找资源
com.test.Test.class.getResourceAsStream("/config/resource.properties"),
这里以’/’开头,会在当前类的类加载器的classpath根目录开始,按照指定路径查找资源.

 

今日查看Struts的资源文件加载,于是用它的util类去加载资源文件,但是指定”/MessageResources.properties”,却是加载不进来。一看源代码,才方现它是用ClassLoader.getResourceAsStream(String name)。开始,很迷惑,因为Class.getResourceAsStream(String path)其实就是调用ClassLoader.getResourceAsStream(String name)来加载资源的,不应该有问题呀。后来看了下Class.getResourceAsStream的代码,原来,在这个方法里,先把传进去的路径先处理了一下,如果以”/”开始,则去掉。如果是相对路径,则会把路径构造完全,构造完后的路径,也不是以”/”开头。再去了解了一下ClassLoader.getResourceAsStream(String name),才明白,该方法只限于绝对路径查找资源,所以一开始就是认定从classpath根目录开始查找资源,所以以后用它来加载资源的话,在路径开头不要用”/”

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值