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?
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:
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.
"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
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.
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")
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")
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é!!