En la aplicación web Java, suponga que si quiero obtener el InputStream de un archivo XML, que se coloca en CLASSPATH (es decir, dentro del carpeta de fuentes ), ¿cómo lo hago?
Respuestas:
ClassLoader.getResourceAsStream()
.
Como se indica en el comentario a continuación, si se encuentra en un ClassLoader
entorno múltiple (como pruebas unitarias, aplicaciones web, etc.), es posible que deba usar Thread.currentThread().getContextClassLoader()
. Consulte http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 .
InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
ClassLoader.class.getResourceAsStream("/path/file.ext");
java.lang.NullPointerException: null
y la forma más simple que creo esnew ClassPathResource("/path/to/your/file").getInputStream()
Eso depende de dónde esté exactamente 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 primer caso, debe utilizar "/file.xml
" (observe la barra inclinada) para encontrar el archivo y no importa qué clase use para intentar localizarlo.
Si el archivo XML está al lado de alguna clase, SomeClass.class.getResourceAsStream()
solo con el nombre del archivo es el camino a seguir.
someClassWithinYourSourceDir.getClass (). getResourceAsStream ();
getClass().getResourceAsStream("...")
etc
Algunas de las opciones "getResourceAsStream ()" en esta respuesta no me funcionaron, pero esta sí:
SomeClassWithinYourSourceDir.class.getClassLoader (). GetResourceAsStream ("suResource");
Intenté la solución propuesta y la barra diagonal en el nombre del archivo no me funcionó, ejemplo: ... (). GetResourceAsStream ("/ my.properties"); se devolvió nulo
La eliminación de la barra funcionó: .... getResourceAsStream ("my.properties");
Aquí es de la API de documentación: antes de la delegación, se construye un nombre de recurso absoluto a partir del nombre de recurso dado utilizando 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').
null
sin el /
. Agregar el carácter de barra funcionó para mí. Debe haber alguna otra diferencia entre @ hussein-terek y mi configuración y tu configuración.