2010-05-04 10 views
8

Ich möchte eine Reihe von Textdateien lesen, indem ich sie als Ressourcen mithilfe des Kontext-Classloaders lade.Finden aller CLASSPATH-Ressourcen, die mit einem Muster übereinstimmen

Gibt es eine Möglichkeit, eine Liste von Ressourcen zu erhalten, deren Namen einem bestimmten Muster entsprechen? Für zB:

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

Libraries wie Spring können die Classpath scannen, um Klassen mit einer bestimmten Anmerkung zu finden, so dass ich mich gefragt, ob es etwas ähnliches ein Bündel von Ressourcen zu laden.

Antwort

4

Spring unterstützt ant-style class path resource matching.

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

Beispiele wie: classpath:com/mycompany/**/applicationContext.xml, /WEB-INF/*-context.xml

Sehen Sie, wenn Sie Feder für Ihr Projekt verwenden können. Wenn es nicht möglich ist, dann können Sie immer den Quellcode nach unten ziehen, um zu sehen, was sie tun, und tun, dass selbst :)

+3

org.springframework.core.io.support.PathMatchingResourcePatternResolver.java scheint die Klasse macht die Arbeit zu sein. Ich kann Spring in meiner Anwendung jedoch nicht verwenden. :( –

2

können Sie versuchen, Mais-cps

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

Verwenden dependecy unten in Ihrem pom.xml

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

Kommentar von „Binil Thomas“ war auf dem richtigen Weg, ich war für die Bestätigung suchen, Spring PathMatchingResourcePatternResolver von Java Config verwendet werden könnte, so dass ich die daraus resultierende „Resource“ Liste den Frühling geben könnte Hibernate SessionFactory.mappingLocations mit Sie müssen die Liste der Hibernate * .hbm.xml-Dateien jedes Mal aktualisieren, wenn eine neue Zuordnungsdatei hinzugefügt wurde. Ich konnte dies mit dem PathMatchingResourcePatternResolver mit dem folgenden Code erreichen:

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); 

Arbeiten wie ein Charme.

+1

Perfekt. Genau das, was ich brauchte. –

8

Verwenden Sie einfach:

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

Ich habe diese drei von vier Mal im vergangenen Jahr, und dies ist bei weitem die beste Lösung, die ich gestoßen bin. OP nixed Frühling, aber dieser Trick macht es einfach Ressourcenmuster aus dem Klassenpfad zu bekommen, und funktioniert gut für meine Situation. – gbegley

Verwandte Themen