对Class.getResourceAsStream和ClassLoader.getResourceAsStream方法所使用的资源路径的解释

1 篇文章 0 订阅
这是个很基础的问题了,这里提供一些示例,帮助快速理解和记忆这个问题。

在该方法的文档:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream%28java.lang.String%29 中详细有描述了它接收的路径是如何定义的! 本文原文出处: blog.csdn.net/bluishglc/article/details/38753047严禁任何形式的转载,否则将委托CSDN官方维护权益!

关于Class.getResourceAsStream

首先, 我们必须先了解根路径“/”是如何定义的,这对我们使用getResourceAsStream准确加载文件是很重要的。首先,我们要明白这个根路径是对应类所处类路径上的根目录!什么意思呢?假如一个项目经过编译之后生成了如下class文件和目录结构:


[plain]  view plain  copy
  1. com  
  2.    |-github  
  3.           |-demo  
  4.           |    |-A.class  
  5.           |    |-1.txt  
  6.           |-B.class  
  7.           |-2.txt  


在这样的编译输出目录下,文件"1.txt"的绝对路径名为:"/com/github/demo/1.txt文件"2.txt"的绝对路径名为:"/com/github/2.txt
如同getResourceAsStream方法文档上的解释:以/开头时是绝对路径,与类路径不同的是路径上的“."换成了"/"。

接下着我们看相对路径!

首先我们必须明确“相对”路径总是指相对于当前class的路径!

例如,如果我们使用

InputStream is= A.class.getResourceAsStream("1.txt");

路径不是以/开头,说明这是一个相对路径,相对的是A.class这个文件,所以,这里的“1.txt”所指的正确位置是与A.class处于同一目录下的1.txt文件,这一文件是存在的,所引不会报错。

如果我们按相对路径的方式通过A去加载2.txt,则路径应该这样描述:

InputStream is= A.class.getResourceAsStream("../2.txt");   

是的,用“.."表示上一级目录。

如果我们按相对路径的方式通过B去加载1.txt,则路径应该这样描述:   

InputStream is= B.class.getResourceAsStream("demo/1.txt");   

注意!demo前是没有/的,这是一个相对路径,是相对于B所在包下的demo子包里的1.txt文件,所以这个路径也是正确无误的!

关于ClassLoader.getResourceAsStream

class.getResourceAsStream最终调用是ClassLoader.getResourceAsStream

只是在这之前对参数进行了调整。如果参数已/开头,则去除/,否则把当前类的包名加在参数的前面。

在使用ClassLoader.getResourceAsStream时,路径直接使用相对于classpath的绝对路径,并且不能已 / 开头。

InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("com/github/demo/1.txt");

原文出自:https://blog.csdn.net/bluishglc/article/details/38753047


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值