getResource()方法的使用以及路径问题

getResource()方法是Class类中的一个获取文件的方法,我在使用该方法稍微不注意经常会出现如下报错

Exception in thread "main" java.lang.NullPointerException

 因此我觉得还是有必要写一篇博客来梳理以下该方法的误区、盲点。


首先getResource()方法可以通过getClass().getClassLoader().getResource()和getClass().getResource()两种方式调用,这两种方式调用的区别在于

getClass().getClassLoader().getResource():这个方法是通过类加载器来加载资源的。它从类路径的根目录开始搜索资源。 返回的 URL 是绝对路径,不受调用类的包所影响。

getClass().getResource():这个方法是通过当前类的 class 文件所在的位置作为相对路径来搜索资源的。 返回的 URL 是相对路径,受调用类的包的影响。

总结来说就是

  • getClass().getResource(fileName):表示只会在当前调用类所在的同一路径下查找该fileName文件;
  • getClass().getClassLoader().getResource(fileName):表示只会在classpath根目录下(/)查找该文件;
  • fileName如果是前面加“/”,如"/fileName",则表示绝对路径,取/目录下的该文件;
  • 如果是前面没有加“/”,如"fileName",则表示相对路径,取与调用类同一路径下的该文件。
  • getClassLoader()表示/目录,即classpath根目录

比如说在com/***/A包下存在一个文本文件,那么在同一文件夹下的类获取该资源的方法如下

clazz.getClass().getResource("1.text");//相对路径获取
clazz.getClass().getResource("/com/***/A/1.text");//绝对路径获取
clazz.getClass().getClassLoader().getResource("com/***/A/1.text");//com前不需要加“/”

 而不同包的类获取该资源,比如说com/***/B包下的类获取,则需要填写如下获取路径

clazz.getClass().getResources("../A/1.text");
clazz.getClass().getResources("/com/***/A/1.text");
clazz.getClass().getClassLoader().getResources("com/***/A/1.text");
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zmbwcx2003

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值