查找与模式匹配的所有CLASSPATH资源

时间:2010-05-04 16:06:26

标签: java classpath

我想通过使用上下文类加载器将它们作为资源加载来阅读一堆文本文件。

URL url = Thread.currentThread()
                .getContextClassLoader()
                .getResource("folder/foo.txt");

有没有办法获得名称与给定模式匹配的资源列表?例如:

URL[] matchingUrls = someLibrary.getMatchingResources("folder/*.txt");

像Spring这样的库可以扫描类路径来查找带有给定注释的类,所以我想知道是否有类似的东西加载了一堆资源。

4 个答案:

答案 0 :(得分:11)

只需使用:

@Value("classpath:folder/*.xml")
Resource[] resources;

答案 1 :(得分:7)

来自“Binil Thomas”的评论是在正确的轨道上,我正在寻找确认可以从Java Config使用Spring的PathMatchingResourcePatternResolver,以便我可以将生成的“资源”列表提供给Spring Hibernate SessionFactory.mappingLocations而不必每次添加新映射文件时,都会更新Hibernate * .hbm.xml文件列表。我可以使用以下代码使用PathMatchingResourcePatternResolver实现此目的:

import org.hibernate.SessionFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
...
ResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();   
Resource [] mappingLocations = patternResolver.getResources("classpath*:mappings/**/*.hbm.xml");
sessionFactory.setMappingLocations(mappingLocations);

像魅力一样。

答案 2 :(得分:6)

Spring支持ant-style类路径资源匹配。

http://static.springsource.org/spring/docs/2.5.x/reference/resources.html

例如:classpath:com/mycompany/**/applicationContext.xml, /WEB-INF/*-context.xml

看看你是否可以在项目中使用spring。如果不可能,那么您可以随时下载源代码以查看他们正在做什么,并自己完成:)

答案 3 :(得分:3)

你可以试试corn-cps

 List<URL> resources = CPScanner.scanResources(new PackageNameFilter("net.sf.corn.cps.*"), new ResourceNameFilter("*.xml"));

在pom.xml中使用以下依赖项

<dependency>
    <groupId>net.sf.corn</groupId>
    <artifactId>corn-cps</artifactId>
    <version>1.0.1</version>
</dependency>