Wie kann ich entdecken Ressourcen in einem Java-jar mit einem Platzhalter Namen?
Frage
Ich möchte alle XML-Dateien finden, die meine Klassenladeprogramm der Verwendung eines Wildcard-Muster bewusst ist. Gibt es eine Möglichkeit, dies zu tun?
Lösung
Es erfordert ein wenig Trickserei, aber hier ist eine relevante Blogeintrag . Sie schätzen, zuerst die URLs der Gläser, dann das Glas öffnen und seinen Inhalt scannen. Ich glaube, Sie würden die URLs aller Gläser durch die Suche nach `/META-INF/MANIFEST.MF‘ entdecken. Verzeichnisse wäre eine andere Sache sein.
Andere Tipps
Ein Frühling ApplicationContext
kann dies trivialerweise tun:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationConext.xml");
Resource[] xmlResources = context.getResources("classpath:/**/*.xml");
Siehe ResourcePatternResolver # GetResources oder Application .
List<URL> resources = CPScanner.scanResources(new PackageNameFilter("net.sf.corn.cps.sample"), new ResourceNameFilter("A*.xml"));
setzen Sie den Code-Schnipsel in Ihrem pom.xml
<dependency>
<groupId>net.sf.corn</groupId>
<artifactId>corn-cps</artifactId>
<version>1.0.1</version>
</dependency>
Eine JAR-Datei ist nur eine andere ZIP-Datei, nicht wahr?
Also ich denke, man könnte die JAR-Dateien iterieren mit http://java.sun.com/javase/6/docs/api/java/util/zip/ZipInputStream.html
Ich denke, so etwas wie:
ZipSearcher searcher = new ZipSearcher(new ZipInputStream(new FileInputStream("my.jar")));
List xmlFilenames = searcher.search(new RegexFilenameFilter(".xml$"));
Prost. Keith.
Nun, es ist nicht aus Java, aber
jar -tvf jarname | grep xml$
zeigt Ihnen alle XMLs in das Glas.