2010-05-04 20 views
8

Quiero leer un grupo de archivos de texto, cargándolos como recursos usando el cargador de clases de contexto.Encontrar todos los recursos de CLASSPATH que coincidan con un patrón

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

¿Hay alguna forma de obtener una lista de recursos cuyos nombres coinciden con un patrón determinado? Por ejemplo:

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

Bibliotecas como Spring pueden escanear la ruta de clase para encontrar las clases con una anotación dada, por lo que me pregunto si hay algo similar para cargar un montón de recursos.

Respuesta

4

Spring admite la coincidencia de recursos de ruta de clase ant-style.

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

Ejemplos como: classpath:com/mycompany/**/applicationContext.xml, /WEB-INF/*-context.xml

ver si se puede usar un muelle para su proyecto. Si no es posible, entonces siempre se puede tirar hacia abajo el código fuente para ver lo que están haciendo, y hacerlo usted mismo :)

+3

org.springframework.core.io.support.PathMatchingResourcePatternResolver.java parece ser la clase haciendo el trabajo. Sin embargo, no puedo usar Spring en mi aplicación. :( –

2

Usted puede tratar de maíz-cps

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

Uso del dependecy a continuación en su pom.xml

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

comentario de "Binil Thomas" estaba en el camino correcto, que estaba buscando la confirmación de que PathMatchingResourcePatternResolver de primavera podría ser utilizado desde Java Config para que pudiera dar la lista resultante "recursos" para la primavera Hibernate SessionFactory.mappingLocations con tener que actualizar la lista de archivos Hibernate * .hbm.xml cada vez que se agrega un nuevo archivo de mapeo. Yo era capaz de lograr esto con el PathMatchingResourcePatternResolver con el siguiente código:

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

funciona como un encanto.

+1

Perfecto. Justo lo que necesitaba. –

8

sólo tiene que utilizar:

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

Lo he necesitado tres veces en el último año, y esta es, de lejos, la mejor solución que he encontrado. OP nixed spring, pero este truco lo hace fácil para obtener patrones de recursos del classpath, y funciona muy bien para mi situación. – gbegley

Cuestiones relacionadas