racine pour les chemin d'accès de fichiers - Java - Programmation
Marsh Posté le 03-08-2009 à 11:15:57
J'ai finalement utilisé la deuxième méthode.
Je vous donne le bout de code. Il suppose que l'on est dans une classe s'appelant MyClass. Ce bout de code met un attribut public static et l'initialise statiquement.
A partir d'une autre classe, il suffit donc de taper MyClass.WEB_INF pour avoir le chemin du dossier WEB-INF
Si le dossier WEB-INF n'est pas trouvé, l'attribut vaudra null.
Si vous avez des suggestions pour améliorer ce bout de code ou une autre solution, je suis ouvert à toutes propositions.
Code :
|
Marsh Posté le 03-08-2009 à 11:52:23
ouch... c'est pas très sexy (pour pas dire que c'est vomitif)...
je crois que n'utilise pas très bien le getresource:
http://www.siteduzero.com/forum-83 [...] ource.html
dedans tu mets direct ton fichier, dans une arborescence relative à ton classpath...
Marsh Posté le 03-08-2009 à 18:46:41
Oh la la, overkill. :\
1. Si tu ne pointes pas vers le même répertoire sous Eclipse et en déployant autrement, so what? Ce sont deux environnements différents.
2. De toute façon, rien ne dit que "." soit une bonne valeur même en production. Il est peut-être souhaitable de paramétrer le répertoire de destination selon de le déploiement.
Marsh Posté le 04-08-2009 à 10:56:18
pataluc a écrit : ouch... c'est pas très sexy (pour pas dire que c'est vomitif)... |
Je ne vois pas en quoi l'utilisation du getResource() est mauvaise. Je l'utilise pour récupérer le chemin d'accès de mon .class (qui se trouve bien dans le classpath par définition) et à partir de là, remonter jusqu'au WEB-INF.
Ceci me permet ensuite d'avoir une variable "WEB_INF" qui contient le chemin d'accès du répertoire WEB-INF et de décrire ensuite mes chemins de fichiers relativement au WEB_INF.
du coup, pour tous mes chemins d'accès, je n'ai plus qu'à faire WEB_INF+"/truc/machin" et je sais que je n'ai pas à me prendre la tête sur la racine pour les chemins d'accès aux fichiers.
Je pourrais certes mettre les fichiers auxquels je veux accéder dans mon classpath, mais le but est de ne pas etre obligé de faire cette manipulation pour chaque fichier auquel je souhaite accéder.
Pourrais tu éclaircir stp?
Marsh Posté le 04-08-2009 à 11:05:56
ben je sais pas, t'as regardé le lien que j'ai mis? dans le post http://www.siteduzero.com/forum-83 [...] l#r3874270 la manière de faire reviens au même que la tienne, en plus classe.
ou alors il faut passer par des fichiers de config, qui seront paramétrés en fonction de ton env de dev ou de prod, mais la c'est vraiment pas top je trouve... au niveau propreté et maintenabilité du code c'est beurk.
Marsh Posté le 05-08-2009 à 15:45:43
Je suis pas sûr que tu abordes le problème de la bonne façon. Tu as besoin de quoi ? Lire des fichiers contenus dans ton application ? Est-ce que tu as vraiment besoin d'un chemin sur le filesystem (qui pourra très bien ne pas exister si ton application est un jour déployée sous forme d'un fichier war non décompressé) ?
Si c'est juste pour pouvoir lire des fichiers placés dans WEB-INF, la meilleure solution, c'est ServletContext.getResource() ou getResourceAsStream() Ces méthodes retournent respectivement un objet URL et InputStream, à voir si ça suffit ou si tu as vraiment besoin d'un File.
Marsh Posté le 03-07-2009 à 14:58:35
Bonjour,
Le problème
Je vous expose un problème assez courant:
Je développe une appli J2EE et lorsque je déploie, j'ai des soucis car la racine pour les chemins d'accès aux fichiers diffère selon que je suis en train de développer sous eclipse ou que je déploie l'appli.
en clair, si je fais:
mon File ne pointera pas au même endroit si j'exécute à partir d'eclipse que si je déploie sur le serveur d'appli. Or, je ne peux pas me permettre de mettre des chemins absolus.
Le besoin
Je veux donc mettre à disposition quelque part dans mon code une méthode qui me retourne le chemin d'accès de la racine de mon projet, disons le chemin d'accès du répertoire WEB-INF par exemple et ceci, quelque soit le contexte d'exécution de mon appli. J'ai bien des solutions mais plus moches les unes que les autres.
Une fois que j'aurais le chemin d'accès du dossier WEB-INF, il me suffira de définir tous mes chemins d'accès en relatif par rapport à ce dossier.
solution 1
dans une de mes classes, je fais un new File("." ) et je remonte l'arborescence jusqu'à avoir un répertoire ayant pour nom "WEB-INF"
solution 2
je me sers du ClassLoader
et je sais que ça va me faire pointer dans tous les cas sur WEB-INF/classes/package/sousPkg/MaClass.class
Je n'aurais donc plus qu'à remonter de 3 étages pour me situer au dossier WEB-INF
Je voudrais savoir si vous avez des solutions plus propres à proposer, merci d'avance