Quiero descubrir todos los archivos xml que mi ClassLoader conoce usando un patrón de comodín. ¿Hay alguna manera de hacer esto?¿Cómo puedo descubrir recursos en un contenedor Java con un nombre de comodín?
Respuesta
Requiere un pequeño truco, pero aquí hay un relevante blog entry. Primero averigua las URL de los jar, luego abre el jar y escanea sus contenidos. Creo que descubrirá las URL de todos los archivos jar buscando `/META-INF/MANIFEST.MF '. Los directorios serían otra cosa.
Bueno, no es desde dentro de Java, pero
jar -tvf jarname | grep xml$
le mostrará todas las XMLs en el frasco.
Unfortuneately Necesito una solución que está dentro de Java. –
Un archivo JAR es simplemente otro archivo ZIP, ¿verdad?
Así que supongo que se podría repetir el tarro-archivos usando http://java.sun.com/javase/6/docs/api/java/util/zip/ZipInputStream.html
Estoy pensando en algo como:
ZipSearcher searcher = new ZipSearcher(new ZipInputStream(new FileInputStream("my.jar"))); List xmlFilenames = searcher.search(new RegexFilenameFilter(".xml$"));
Saludos. Keith.
Una primavera ApplicationContext
puede hacer esto trivialmente:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationConext.xml");
Resource[] xmlResources = context.getResources("classpath:/**/*.xml");
Ver ResourcePatternResolver#getResources o ApplicationContext.
En primavera más reciente, el patrón no funcionará. El prefijo debe ser 'classpath *:' para encontrar los recursos dentro de jar. Esto al menos con un archivo war y una biblioteca jar que contiene archivos xml. – Kayaman
List<URL> resources = CPScanner.scanResources(new PackageNameFilter("net.sf.corn.cps.sample"), new ResourceNameFilter("A*.xml"));
colocará el fragmento en su pom.xml
<dependency>
<groupId>net.sf.corn</groupId>
<artifactId>corn-cps</artifactId>
<version>1.0.1</version>
</dependency>
Esta parece ser una de las soluciones más fáciles. La última versión es 1.1.7 en maven central, desde el 8-20-2014. –
- 1. ¿Cómo deben accederse los recursos en un contenedor compilado?
- 2. ¿Cómo puedo descubrir la "ruta" de un recurso incrustado?
- 3. ¿Cómo puedo eliminar archivos que no coinciden con un comodín?
- 4. ¿Cuántos detalles de hardware puede descubrir un Applet de Java?
- 5. ¿Cómo descubrir el tiempo de creación de un archivo con Java?
- 6. ¿Cómo puedo obtener el nombre de un Objeto en Java?
- 7. ¿Cómo ejecuto un contenedor desde el interior de un contenedor?
- 8. ¿Cómo iniciar y detener un contenedor Tomcat con Java?
- 9. ¿Cómo leo un archivo de recursos de un archivo jar de Java?
- 10. ¿Cómo comprobar un archivo si existe con un comodín en Java?
- 11. ¿Es posible descubrir canalizaciones con nombre en Windows?
- 12. Cargando con ResourceBundle desde el interior de un contenedor
- 13. ¿Cómo puedo crear un contenedor de rutas en Gradle?
- 14. C# /. NET ¿Cómo puedo encontrar el espacio de nombres contenedor de un nombre de clase
- 15. ¿Puedo enumerar los recursos en un paquete dado?
- 16. MySQL seleccionar usando un comodín (pero comodín en campo)
- 17. Colecciones de Java con el comodín
- 18. Distribución de un contenedor
- 19. cómo pasar un comodín en C#
- 20. Java: ¿Cómo puedo acceder al campo de una clase con un nombre almacenado en una variable?
- 21. ¿Cómo puedo obtener anotaciones de recursos en un jersey ContainerResponseFilter
- 22. ¿Hay algo así como un carácter comodín en Java?
- 23. ¿Cómo puedo encontrar los paquetes definidos en un contenedor?
- 24. ¿Cómo se configura un contenedor de bean Spring para cargar un archivo de propiedades Java?
- 25. Uso de subdominios comodín con comodín SSL en Heroku
- 26. ¿Cómo poner un contenedor en mvnrepository.com?
- 27. cómo descubrir de proxy utilizado en un pac
- 28. ¿Cómo puedo descubrir programáticamente las propiedades y métodos de un objeto Win32 :: OLE en Perl?
- 29. Aplicación web Java en un contenedor Servlet vs. versión independiente
- 30. Buscar y reemplazar con un comodín en Xcode 4
Parece que funcionaría pero implicaría una buena cantidad de búsqueda para obtener los nombres de archivo que quiero. Estoy pensando que será más fácil crear un archivo en tiempo de compilación que contenga los archivos que estoy viendo. Este nuevo archivo tendría un nombre conocido y se podría encontrar utilizando el ClassLoader. –