(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的根目录查找
本文详细解释了Java中ClassLoader和Class的getResource()方法如何从不同路径加载资源文件,包括从当前类加载器及其父类加载器的根目录查找资源的具体规则。


被折叠的 条评论
为什么被折叠?



