2011-01-24 13 views
10

Tengo un gran problema haciendo algo realmente estúpido. Es decir, abrir una secuencia a un archivo de recursos en mi carpeta META-INF. Estoy trabajando en una herramienta jar y al hacer esto:no puedo leer un archivo de META-INF

InputStream schemaIS = this.getClass().getClassLoader().getResourceAsStream("/META-INF/schema.xsd"); 

Simplemente obtengo un nulo! El proyecto se construye usando maven y el archivo xsd termina en la carpeta META-INF, pero aún no funciona.

Lo que no entiendo es la teoría detrás de esto? ¿Cómo ejecuta ClassLoader la búsqueda en el sistema de archivos? ¿Cómo puedo poner mis manos en el archivo?

+3

es una aplicación web? – Bozho

Respuesta

23

Prueba quitando primera barra:

InputStream schemaIS = this.getClass().getClassLoader().getResourceAsStream("META-INF/schema.xsd"); 

Se necesita una barra inicial si está llamando el método getResourceAsStream en un objeto Class. En un objeto ClassLoader, la ruta es siempre absoluta y la barra diagonal no es necesaria.

+0

si es un META-INF regular que reside en la raíz del classpath, se necesita la barra diagonal. – Bozho

+2

@Bozho es necesaria una barra diagonal inicial si llama al método getResourceAsStream en un objeto Class, no en un cargador de clases. – dogbane

+0

no es necesario si se realiza una llamada al cargador de clases, pero ciertamente no hace la diferencia. Lo que 'class.gerResourceAsStream()' hace es resolver la ruta relativa a sí mismo, y luego pasarla a getResourceAsStream de su cargador de clases. – Bozho

2

tratar esta ruta: META-INF/schema.xsd (primera / omitidas)

Cuestiones relacionadas