Obtener la ruta de entrada desde un recurso de ruta de clases (archivo XML)

En la aplicación web Java, supongamos que si deseo obtener el InputStream de un archivo XML, que se coloca en CLASSPATH (es decir, dentro de la carpeta de fonts ), ¿cómo lo hago?

ClassLoader.getResourceAsStream() .

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

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

Eso depende de dónde exactamente está el archivo XML. ¿Está en la carpeta de fonts (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á al lado de alguna clase, SomeClass.class.getResourceAsStream() solo con el nombre de archivo es el camino a seguir.

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

someClassWithinYourSourceDir.getClass (). getResourceAsStream ();

Algunas de las opciones de “getResourceAsStream ()” en esta respuesta no me funcionaron, pero esta sí lo hizo:

SomeClassWithinYourSourceDir.class.getClassLoader (). GetResourceAsStream (“yourResource”);

De forma predeterminada, cada recurso agregado a la ruta de clases en una aplicación web se copia en la carpeta WEB-INF / classes en la guerra desplegada.

Puede administrar esto mientras desarrolla la aplicación en eclipse a través de:

Haga clic derecho en proyecto -> propiedades -> Ruta de comstackción de Java -> pestaña Origen -> carpeta de salida predeterminada

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

Por ejemplo, para acceder a pdf-sample.pdf en WEB-INF / classes , puede usar lo siguiente:

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

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

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

La eliminación de la barra funcionó: …. getResourceAsStream (“my.properties”);

Aquí está la API de doc: antes de la delegación, se construye un nombre de recurso absoluto 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').