我想知道Class.getResource()
和之间有什么区别ClassLoader.getResource()
?
编辑:我特别想知道在文件/目录级别是否涉及任何缓存。如“类别列表中缓存目录列表吗?”
AFAIK以下基本上应该做同样的事情,但事实并非如此:
getClass().getResource()
getClass().getClassLoader().getResource()
我在摆弄一些报表生成代码时发现了这一点,该代码WEB-INF/classes/
从该目录中的现有文件中创建了一个新文件。使用Class中的方法时,可以使用找到部署getClass().getResource()
时存在的文件,但是当尝试获取新创建的文件时,我收到了一个空对象。浏览目录清楚地表明新文件在那里。文件名前面有一个正斜杠,如“ /myFile.txt”中所示。
另一方面,的ClassLoader
版本getResource()
确实找到了生成的文件。从这种经验看来,目录列表存在某种形式的缓存。我是对的,如果是这样,在哪里记录?
从API文档开始Class.getResource()
查找具有给定名称的资源。搜索与给定类关联的资源的规则由该类的定义类加载器实现。此方法委派给该对象的类加载器。如果此对象是由引导类加载器加载的,则该方法将委托给ClassLoader.getSystemResource(java.lang.String)。
对我来说,这是“ Class.getResource实际上正在调用其自己的类加载器的getResource()”。这和做一样getClass().getClassLoader().getResource()
。但这显然不是。有人可以为我提供一些启发性的东西吗?