Class.getResource与ClassLoader.getResource()区别
Class.getResource是根据类的相对路径来访问资源的。如果该类没有package,则类的根路径是就是当前路径;如果该类有package,则类的根路径是定级包所在的路径。
下面显示了一个类的包层次结构:
+bin--
+myjava--
Drawing.class
+images--
title.gif
假设我们要获取title.gif对象,可以通过以下方式得到:
1 Image img = (new ImageIcon(Drawing.class.getResource("/images/title.gif"))).getImage(); 2 Image img = (new ImageIcon(Drawing.class.getResource("../images/title.gif"))).getImage();
从上述获取title.gif方式可知,在用Class.getResource获取资源文件时:
1、如果你指定的路径以“/”开头,那么就是从ClassPath的起点开始寻找这个路径。
2、如果直接以某个package名或者表示路径的符号(例如:..代表上级目录)开头,那么就是从当前package名的目录为起点开始寻找。
所以大家如果用过hibernate就知道,有些表示类到数据库表的映射关系的xml文件就和这个类的class文件放在一起,这样它就直接使用这个类.class.getResource方法来得到这个xml文件。
而在使用ClassLoader的getResource方法的时候,永远是以Classpath为直接起点开始寻找资源的,不用担心从什么包开始寻找的问题。