ClassLoader和Class的getResource()方法的路径问题

来源:互联网 发布:python 如何读入文件 编辑:程序博客网 时间:2024/06/06 05:25

(1) ClassLoader的getResource()方法都是直接从class的根目录开始查找.

参数之前加不加/都一样.都是从根路径开始查找,如果当前ClassL根路径下没找到资源,还可以到当前类加载器(ClassLoader)的父ClassLoader的根目录查找,前提是必须从根目录开始,不能是相对目录.

根目录包括:web程序的web-inf/classes 以及tomcat5/common/classes和tomcat5/shared/classes

(2) Class的getResource()

Class的getResource()方法参数中不加包名,则在当前类相同的包下查找。

加上包后,不加/表示相对路径, 

加/ 表示从根路径开始,并且当前的ClassLoader的根路径下查找失败可以到 父ClassLoader的跟路径下继续查找 

比如 ClassA.class.getResource("1.txt") //1.txt和ClassA.class同级(这个不涉及到父ClassLoader)

ClassA.class.getResource("abc/1.txt") //ClassA.class所在的文件夹里有个abc文件夹,这个abc文件夹下有1.txt(这个不涉及到父ClassLoader)

ClassA.class.getResource("/abc/1.txt") //这样的话,abc必须是跟路径下的,web中可以是web-inf/classes/abc/1.txt

或者tomcat5的common或者shared的classes的abc路径下有1.txt

即,tomcat5/common/classes/abc/1.txt

tomcat5/shared/classes/abc/1.txt.

实际上,Class的getResource()参数前面加/时会先把/去掉,然后委托ClassLoader的getResource(),这样通过上面(1)中所述规则,

可知,加上/是Class的getResource()可以从当前ClassLoader的根目录或者父ClassLoader的根目录查找



原创粉丝点击