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

转自:http://blog.csdn.net/z69183787/article/details/17097671
1.两者都是读取配置文件的方式。class.getClassLoader().getResource()是正规的实现,即先由class获得classLoader,再由classLoader获得文件。class.getResource()是封装的一个方法,二者的区别在哪呢?在参数上。

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

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

[java]  view plain copy


  1. /** 

  2.     * Add a package name prefix if the name is not absolute Remove leading ”/” 

  3.     * if name is absolute 

  4.     */  

  5.    private String resolveName(String name) {  

  6.        if (name == null) {  

  7.            return name;  

  8.        }  

  9.        if (!name.startsWith(“/”)) {  

  10.            Class c = this;  

  11.            while (c.isArray()) {  

  12.                c = c.getComponentType();  

  13.            }  

  14.            String baseName = c.getName();  

  15.            int index = baseName.lastIndexOf(‘.’);  

  16.            if (index != -1) {  

  17.                name = baseName.substring(0, index).replace(‘.’‘/’)  

  18.                    +”/”+name;  

  19.            }  

  20.        } else {  

  21.            name = name.substring(1);  

  22.        }  

  23.        return name;  

  24.    }  



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




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值