Class.getResource()和ClassLoader.getResource()之间有什么区别?我想知道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()..但显然不是。有人能给我一些关于这件事的启示吗?
3 回答
梦里花落0921
TA贡献1772条经验 获得超6个赞
Class.getResource
foo.bar.Baz.class.getResource("xyz.txt");foo.bar.Baz.class.getClassLoader().getResource("foo/bar/xyz.txt");
foo.bar.Baz.class.getResource("/data/xyz.txt");foo.bar.Baz.class.getClassLoader().getResource("data/xyz.txt");
达令说
TA贡献1821条经验 获得超6个赞
.class
System.out.println( getClass().getResource(getClass().getSimpleName() + ".class") );
添加回答
举报
0/150
提交
取消