我想知道Class.getResource()
和ClassLoader.getResource()
之间的区别是什么?
编辑:我特别想知道文件/目录级别上是否涉及缓存。就像“在Class版本中,目录列表是否被缓存?”
据我所知,以下代码应该基本相同,但它们并不相同:
getClass().getResource()
getClass().getClassLoader().getResource()
当我调试一些报告生成代码时,我发现使用Class
的方法可以通过getClass().getResource()
找到已部署的文件,但是当尝试获取新创建的文件时,我收到了一个空对象。浏览目录清楚地显示新文件在那里。文件名以斜杠开头,例如 "/myFile.txt"。而
ClassLoader
版本的getResource()
则可以找到生成的文件。从我的经验来看,似乎存在某种缓存目录列表的情况。我是正确的吗?如果是这样,那么这个地方在哪里有记录呢?根据
Class.getResource()
的API文档规则,搜索与给定类相关联的资源的规则由类的定义类加载器实现。对我来说,这意味着“Class.getResource实际上调用其自己的类加载器的getResource()”。这应该与执行
getClass().getClassLoader().getResource()
相同。但显然不是这种情况。请问有人能够为我提供更多关于此问题的解释吗?
this.getClass().getClassLoader().getResource("/");
返回 null?它不应该与this.getClass().getClassLoader().getResource(".");
相同。 - Asif Mushtaq