Cómo acceder a un archivo en la carpeta WEB-INF en la clase java

Tengo una clase simple de Java en una aplicación web y quiero leer un archivo de configuración en la carpeta WEB-INF . Sé la manera de acceder al archivo si está en la ruta de clases (carpeta WEB-INF/classes ). Como la carpeta WEB-INF/classes está pensada para archivos .class , quiero mantener mi archivo de configuración solo en la carpeta WEB-INF .

¿Alguien puede decirme cómo puedo acceder desde mi clase Java?

ServletContext.getResourceAsStream () cargará un archivo de una ruta dada relativa a la raíz del archivo WAR. Algo como:

 ServletContext ctx; InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties"); 

El principal problema aquí es que necesita acceder al contexto de servlet para poder hacer esto. Lo tiene en un servlet o un filtro, pero no en un componente no web más atrás en la aplicación. Tienes pocas opciones:

  • Haga que el contexto de servlet esté disponible desde la capa web a la capa de servicio, a través de una variable con ámbito de aplicación, o inyección, o de alguna otra manera
  • Coloque el código de carga de recursos en la capa web y exponga eso a la capa de servicio
  • Cargue la configuración en la capa web y páselo a la capa de servicio

Puede obtener la ruta absoluta de servlet utilizando el método getRealPath() de ServletContext y luego anexar WEB-INF a la ruta que obtiene. Creo que esto es muy básico, puede haber algunas otras respuestas también.

“El nuevo FIleInputStream (Utility.class.getClassLoader (). getResource (keyFileName) .getPath ()) funcionó para mí.

Aquí “Utility” es mi nombre de clase donde el código llama a esta línea, “keyFileName” es el archivo que necesito abrir

hey you all care for context related file loading like application context , web.xml ,config and property file

Aquí se explica cómo cargar un archivo java de cualquier tipo de archivo en WEB-INF pero se almacena en otra estructura, como un reportFile subcarpeta. reportFile su archivo o subcarpeta report01

fullpath is = /WEB-INF/reportFile/report01/report.xml , he intentado muchas posibilidades para cargar y leer este archivo xml … ninguna de las anteriores me ha funcionado, pero este es el truco para usar en el futuro …

In Action or inservice class you know interface implementation class sin imports que también es una buena parte.

declara tu objeto de archivo

 File myClass = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getFile()); System.out.println("Finding calss path first then remove classes from the path " + myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFIle/report01/reports.xml") 

2. Cargue la ruta eliminando las classes de las anteriores y agregue su ruta específica

 File f = new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml") 

Entonces

incluso puedes analizarlo usando el analizador xml o hacer cualquier cosa

 document = docBuilder.parse(new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml")); 

¡¡Aclamaciones!!