如何使用通配符名称发现Java jar中的资源?

时间:2008-09-25 13:11:57

标签: java classpath

我想使用通配符模式发现我的ClassLoader知道的所有xml文件。有没有办法做到这一点?

5 个答案:

答案 0 :(得分:7)

Spring ApplicationContext可以做到这一点:

 ApplicationContext context = new ClassPathXmlApplicationContext("applicationConext.xml");
 Resource[] xmlResources = context.getResources("classpath:/**/*.xml");

请参阅ResourcePatternResolver#getResourcesApplicationContext

答案 1 :(得分:6)

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

将代码段放入pom.xml

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

答案 2 :(得分:5)

这需要一点点诡计,但这里有一个相关的blog entry。首先找出罐子的URL,然后打开罐子并扫描其内容。我想你会通过查找`/META-INF/MANIFEST.MF'来发现所有罐子的URL。目录将是另一回事。

答案 3 :(得分:1)

JAR文件只是另一个ZIP文件,对吧?

所以我想你可以使用http://java.sun.com/javase/6/docs/api/java/util/zip/ZipInputStream.html

迭代jar文件

我在想:

ZipSearcher searcher = new ZipSearcher(new ZipInputStream(new FileInputStream("my.jar"))); List xmlFilenames = searcher.search(new RegexFilenameFilter(".xml$"));

干杯。基思。

答案 4 :(得分:-4)

嗯,它不是来自Java内部,而是

jar -tvf jarname | grep xml$

将显示jar中的所有XML。