如何正确使用ClassLoader.getResources()?

如何使用从类路径中查找递归资源?ClassLoader.getResources()

例如:

  • 查找“目录”中的所有资源:想象一下META-INF

    getClass().getClassLoader().getResources("META-INF")

    不幸的是,这只会检索到这个“目录”。URL

  • 所有已命名的资源(递归)bla.xml

    getClass().getClassLoader().getResources("bla.xml")

    但这会返回一个空的 .Enumeration

作为一个奖励问题:与?ClassLoader.getResources()ClassLoader.getResource()


答案 1

Spring Framework有一个类,它允许通过类路径递归搜索:

PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
resolver.getResources("classpath*:some/package/name/**/*.xml");

答案 2

无法以递归方式搜索类路径。您需要知道资源的完整路径名才能以这种方式检索它。资源可能位于文件系统的目录中,也可能位于 jar 文件中,因此它不像执行“类路径”的目录列表那么简单。您需要提供资源的完整路径,例如'/com/mypath/bla.xml'。

对于第二个问题,getResource 将返回与给定资源名称匹配的第一个资源。类路径的搜索顺序在 getResource 的 javadoc 中给出。


推荐