关闭

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

882人阅读 评论(0) 收藏 举报
分类:
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方法获得包名,再加上传入的文件名参数即可。

[java] view plaincopy
  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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7812049次
    • 积分:67068
    • 等级:
    • 排名:第29名
    • 原创:254篇
    • 转载:2716篇
    • 译文:3篇
    • 评论:714条
    文章分类
    最新评论