如何在带有通配符名称的Java jar中发现资源?

如何在带有通配符名称的Java jar中发现资源?,java,classpath,Java,Classpath,我想使用通配符模式发现我的类加载器知道的所有xml文件。有什么方法可以做到这一点吗?好吧,它不是来自Java内部,而是 jar-tvfjarname | grepxml$ 将显示jar中的所有XML。这需要一些技巧,但这里有一个相关的示例。首先找出jar的URL,然后打开jar并扫描其内容。我认为您可以通过查找“/META-INF/MANIFEST.MF”来发现所有JAR的URL。目录是另一回事。JAR文件只是另一个ZIP文件,对吗 所以我想您可以使用 我的想法是: ZipSearcher=n

我想使用通配符模式发现我的类加载器知道的所有xml文件。有什么方法可以做到这一点吗?

好吧,它不是来自Java内部,而是

jar-tvfjarname | grepxml$


将显示jar中的所有XML。

这需要一些技巧,但这里有一个相关的示例。首先找出jar的URL,然后打开jar并扫描其内容。我认为您可以通过查找“/META-INF/MANIFEST.MF”来发现所有JAR的URL。目录是另一回事。

JAR文件只是另一个ZIP文件,对吗

所以我想您可以使用

我的想法是:


ZipSearcher=newZipSearcher(newZipInputStream(newFileInputStream(“my.jar”)));
List xmlFilenames=searcher.search(新的RegexFilenameFilter(“.xml$”);


干杯。Keith.

一个Spring
ApplicationContext
可以简单地完成以下任务:

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

列出资源=CPScanner.scanResources(新的PackageNameFilter(“net.sf.corn.cps.sample”)、新的ResourceNameFilter(“A*.xml”);
将代码片段放在pom.xml中

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

玉米网
玉米蛋白
1.0.1

不幸的是,我需要一个Java内部的解决方案。这看起来是可行的,但需要大量的搜索才能找到我想要的文件名。我认为在构建时创建一个包含我正在查看的文件会更容易。这个新文件将有一个已知的名称,可以使用类加载器找到。这似乎是最简单的解决方案之一。截至2014年8月20日,maven central的最新版本为1.1.7。在最近的春季,这种模式将无法运行。前缀必须是
classpath*:
,才能找到JAR中的资源。这至少需要一个war文件和一个包含xml文件的jar库。
<dependency>
    <groupId>net.sf.corn</groupId>
    <artifactId>corn-cps</artifactId>
    <version>1.0.1</version>
</dependency>