2009-04-27 30 views

Respuesta

73

ClassLoader.getResourceAsStream().

Como se indica en el comentario siguiente, si se encuentra en un entorno de varios ClassLoader (como pruebas unitarias, aplicaciones web, etc.) es posible que deba utilizar Thread.currentThread().getContextClassLoader(). Ver http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388.

+0

ver post personal para un ejemplo de código: http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata-in.html – JVerstry

+12

Si se encuentra en un entorno de cargador de varias clases (como pruebas unitarias/aplicaciones web, etc.), es posible que deba utilizar este hilo. .currentThread(). getContextClassLoader(). Consulte http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 – khylo

+0

Agregue la sugerencia de @ khylo a su respuesta! – froginvasion

5

someClassWithinYourSourceDir.getClass(). GetResourceAsStream();

+0

o 'getClass(). GetResourceAsStream (" ... ")' etc. – rogerdpack

10

Eso depende de dónde exactamente se encuentra el archivo XML. ¿Está en la carpeta de fuentes (en el "paquete predeterminado" o en la "raíz") o en la misma carpeta que la clase?

En el caso anterior, debe usar "/file.xml" (observe la barra diagonal) para encontrar el archivo y no importa qué clase use para tratar de ubicarlo.

Si el archivo XML está junto a alguna clase, SomeClass.class.getResourceAsStream() con el nombre de archivo es el camino a seguir.

10

ClassLoader.class.getResourceAsStream("/path/to/your/xml") y asegúrese de que su script de compilación está copiando el archivo xml en su CLASSPATH.

26
ClassLoader.class.getResourceAsStream("/path/file.ext"); 
+0

pero si implementa web la aplicación en tomcat de esta manera obtendrá el error: 'java.lang.NullPointerException: null', y la manera más simple, creo que es 'new ClassPathResource ("/ruta/a/su/archivo "). getInputStream()' – zhuguowei

4

Algunos de los "getResourceAsStream()" opciones en esta respuesta no funcionó para mí, pero éste hizo:.

SomeClassWithinYourSourceDir.class.getClassLoader() getResourceAsStream ("yourResource");

0

Por defecto, cada recurso añadido a la ruta de clases en una aplicación web se copia bajo WEB-INF/classes carpeta en la guerra desplegada.

usted puede manejar esto mientras que el desarrollo de la aplicación en Eclipse a través de:

proyecto Haga clic derecho -> propiedades -> Java Build Path -> pestaña Fuente -> carpeta de salida predeterminada

En el servlet, puede acceder al recurso prefijando su ruta con '/' que apunta a WEB-INF/classes.

Por ejemplo, el fin de acceder pdf-sample.pdf bajo WEB-INF/classes, puede utilizar el siguiente:

getClass().getResourceAsStream("/pdf-sample.pdf") 

Este tutorial explica muy bien las posibles formas de lectura un archivo de recursos de classpath en una aplicación java, vale la pena leerlo.

0

Intenté la solución propuesta y la barra diagonal en el nombre del archivo no funcionó para mí, por ejemplo: ...(). GetResourceAsStream ("/ my.properties"); null fue devuelto

Eliminando la barra trabajada: .... getResourceAsStream ("my.propiedades ");

Aquí es de API doc: Antes de delegación, un nombre de recurso absoluta se construye a partir del nombre de recurso dado usando este algoritmo:

If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'. 
Otherwise, the absolute name is of the following form: 

    modified_package_name/name 

Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e'). 
Cuestiones relacionadas