首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何正确使用ClassLoader.getResources()?

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

Stack Overflow用户
提问于 2011-03-04 20:36:53
回答 5查看 212.2K关注 0票数 92

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

例如。

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

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

不幸的是,这只能检索到名为bla.xml (递归地)的"directory".

  • all资源的URL

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

但是这将返回一个空的Enumeration.

还有一个额外的问题:ClassLoader.getResources()ClassLoader.getResource()有什么不同

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-04 20:45:35

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

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

票数 25
EN

Stack Overflow用户

发布于 2013-06-25 03:41:17

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

代码语言:javascript
复制
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
resolver.getResources("classpath*:some/package/name/**/*.xml");
票数 43
EN

Stack Overflow用户

发布于 2011-03-04 21:03:55

这是获取某个URL对象所指向的File对象的最简单的方法:

代码语言:javascript
复制
File file=new File(url.toURI());

现在,对于你的具体问题:

  • 在META-INF“目录”中查找所有资源:

您确实可以获取指向此URL的File对象

代码语言:javascript
复制
Enumeration<URL> en=getClass().getClassLoader().getResources("META-INF");
if (en.hasMoreElements()) {
    URL metaInf=en.nextElement();
    File fileMetaInf=new File(metaInf.toURI());

    File[] files=fileMetaInf.listFiles();
    //or 
    String[] filenames=fileMetaInf.list();
}

命名为(recursivly) (recursivly)的

  • 所有资源

在这种情况下,您必须执行一些自定义代码。下面是一个虚拟示例:

代码语言:javascript
复制
final List<File> foundFiles=new ArrayList<File>();

FileFilter customFilter=new FileFilter() {
    @Override
    public boolean accept(File pathname) {

        if(pathname.isDirectory()) {
            pathname.listFiles(this);
        }
        if(pathname.getName().endsWith("bla.xml")) {
            foundFiles.add(pathname);
            return true;
        }
        return false;
    }

};      
//rootFolder here represents a File Object pointing the root forlder of your search 
rootFolder.listFiles(customFilter);

当代码运行时,您将在foundFiles列表中获得所有找到的词条。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5193786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档