Java加载资源的方式

加载资源的方式

1)通过类加载器对象去加载资源
2)通过类的字节码对象去加载资源

  • ClassLoader.getResource()
    • 以反斜杠/开头时:会将参数路径视为绝对路径来读取,导致该绝对路径不以classPath为前缀,会直接返回null。因此,采用这种方式时,不能以反斜杠/开头。
    • 不以反斜杠/开头时:将参数路径当作相对路径来读取,该相对路径会拼接上ClassPath根路径(…/target/classes/)得到最终的绝对路径。此种方式是从ClassPath根下获取
  • Class.getResource()
    • 以反斜杠/开头时:将参数路径当作相对路径来读取,解析参数路径时会去掉/,然后当作相对路径来读取,该相对路径会拼接上ClassPath根路径(…/target/classes/)得到最终的绝对路径。此种方式与ClassLoader.getResource方法相同。
    • 不以反斜杠/开头时:该相对路径会拼接上当前类所在包的路径,再拼接上classPath路径,得到最终的绝对路径。此种方式,检索的是当前类所在包下的文件路径

例子

package testpackage;
public class TestMain {
    public static void main(String[] args) {
        //输出 **/target/classes/testpackage
        System.out.println(TestMain.class.getResource("").getPath());
        //输出 **/target/classes/
        System.out.println(TestMain.class.getResource("/").getPath();
    }
}

总结

使用类加载器对象加载资源时,路径不需要加‘/’,并且这是加载resources文件夹下的资源;
使用类的字节码对象加载资源时,路径加‘/’,加载resources文件夹下的资源。路径不加‘/’,加载当前类所在包的资源。

参考资料

Class.getResource()、ClassLoader.getResource()源码解读-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值