class.getClassLoader().getResource()和class.getResource()的不同

1.两者都是读取配置文件的方式。前者是正规的实现,即先由class获得classLoader,再由classLoader获得文件。后者是封装的一个方法,二者的区别在哪呢?在参数上。

2.二者的参数类型都是String,假设为path。如果读一个当前包中的文件test.properties,而包名是com.xxx;前者的参数path就是“com/xxx/test.properties”,后者的参数是“test.properties”,也就是后者不会写包名,为什么呐?

3.因为后者是class自己封装的方法,他的方法内部,实现了前面包名的添加,如何获得包名的呢?当然由class获取,例如一个程序放在com.xxx包中,名字是test.java。则由Test.class.getName()方法就可以获得完整的包名加类名,然后用subString方法获得包名,再加上传入的文件名参数即可。

4.方法的实现:

 /**
     * Add a package name prefix if the name is not absolute Remove leading "/"
     * if name is absolute
     */
    private String resolveName(String name) {
        if (name == null) {
            return name;
        }
        if (!name.startsWith("/")) {
            Class c = this;
            while (c.isArray()) {
                c = c.getComponentType();
            }
            String baseName = c.getName();
            int index = baseName.lastIndexOf('.');
            if (index != -1) {
                name = baseName.substring(0, index).replace('.', '/')
                    +"/"+name;
            }
        } else {
            name = name.substring(1);
        }
        return name;
    }

5.如果name不是绝对路径,就去掉“/”;如果是绝对的路径,就不要去掉“/”;当然写相对路径;可以看到后面会由calss获得baseName,再加上原参数name,返回完整的name,如果是绝对路径,删掉第一个“/”,返回即可。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值