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?
java
file-io
inputstream
Veera
fuente
fuente
InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
ClassLoader.class.getResourceAsStream("/path/file.ext");
fuente
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.fuente
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
y asegúrese de que su script de compilación esté copiando el archivo xml en el lugar de su CLASSPATH.fuente
someClassWithinYourSourceDir.getClass (). getResourceAsStream ();
fuente
getClass().getResourceAsStream("...")
etcAlgunas de las opciones "getResourceAsStream ()" en esta respuesta no me funcionaron, pero esta sí:
SomeClassWithinYourSourceDir.class.getClassLoader (). GetResourceAsStream ("suResource");
fuente
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').
fuente
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.