web-dev-qa-db-fra.com

Comment accéder à un fichier sous le dossier WEB-INF en classe Java

J'ai une classe Java simple dans une application Web et je veux lire un fichier de configuration dans le dossier WEB-INF. Je connais le moyen d'accéder au fichier s'il se trouve dans le chemin de classe (dossier WEB-INF/classes). Étant donné que le dossier WEB-INF/classes est destiné aux fichiers .class, je souhaite conserver mon fichier de configuration dans le dossier WEB-INF uniquement. 

Quelqu'un peut-il me dire comment je peux y accéder depuis ma classe Java?

14
Newbie

ServletContext.getResourceAsStream () chargera un fichier depuis un chemin donné par rapport à la racine du fichier WAR. Quelque chose comme:

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

Le problème majeur ici est que vous devez avoir accès au contexte de servlet pour pouvoir le faire. Vous avez cela dans une servlet ou un filtre, mais pas dans un composant non Web plus loin dans l'application. Vous avez quelques options:

  • Rendre le contexte de servlet disponible de la couche Web à la couche de service, via une variable étendue à l'application, ou une injection, ou d'une autre manière
  • Placez le code de chargement de ressources dans la couche Web et exposez-le à la couche de service
  • Chargez la configuration dans la couche Web et transmettez-la à la couche de service.
16
Tom Anderson

Vous pouvez obtenir le chemin absolu du servlet en utilisant la méthode getRealPath() de ServletContext, puis ajouter WEB-INF au chemin que vous obtenez. Je pense que c’est très fondamental, il peut y avoir aussi d’autres réponses.

2
Abubakkar

"new FIleInputStream ( Utility.class.getClassLoader (). getResource (keyFileName) .getPath () .__)"

Ici "Utilitaire" est le nom de ma classe où le code appelle cette ligne, "keyFileName" est le fichier que j'ai besoin d'ouvrir

1
sahan maldeniya

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

Voici comment charger un fichier Java n’importe quel type de fichier sous WEB-INF mais il est stocké dans une autre structure telle qu’un sous-dossier reportFile votre fichier ou sous-dossier à nouveau report01-- 

fullpath is = /WEB-INF/reportFile/report01/report.xml, j’ai essayé de nombreuses possibilités pour charger et lire ce fichier xml ... aucune des solutions ci-dessus n’a fonctionné pour moi, mais voici l’astuce pour une utilisation future ...

In Action or inservice class you know interface implementation class non imports c'est une bonne partie aussi.

déclarer votre objet de fichier

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.Chargez le chemin en supprimant classes de ce qui précède et ajoutez votre chemin spécifique.

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

Ensuite

vous pouvez même l'analyser à l'aide d'un analyseur syntaxique xml ou faire quoi que ce soit

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

À votre santé!!

0
danielad