4 votes

comment obtenir le répertoire courant en java ?

J'essaie d'obtenir le répertoire actuel de mon projet depuis java. J'utilise les lignes de codes suivantes pour obtenir les détails du chemin.

Type 1 :

File directory = new File (".");
try {
    System.out.println ("Current directory's canonical path: " 
            + directory.getCanonicalPath()); 
    System.out.println ("Current directory's absolute  path: " 
                + directory.getAbsolutePath());
}catch(Exception e) {
    System.out.println("Exceptione is ="+e.getMessage());
}

Type 2 :

String currentDir = System.getProperty("user.dir");
System.out.println("Current dir using System:" +currentDir);

En exécutant les codes ci-dessus à partir de la classe principale, j'obtiens le répertoire Project. Lorsque je l'exécute du côté serveur, j'obtiens le message suivant : "Current dir using System : D:\Apache Tomcat 6.0.16 \bin ". Mais mon projet est situé dans D:\Apache Tomcat 6.0.16\wepapps\SampleStructs .

Veuillez me faire part de toute suggestion à ce sujet et m'aider à m'en sortir.

7voto

Goran Jovic Points 5882

Tout d'abord, la cause principale de votre problème est la différence entre le répertoire de travail actuel et l'emplacement de votre exécutable. Vous devez savoir que le répertoire de travail actuel sous Linux n'est pas le répertoire où se trouve l'exécutable, mais plutôt le répertoire actuel d'où le programme a été lancé.

A titre d'exemple, disons que vous avez un programme current qui imprime le répertoire courant et il est situé dans /home/user/scripts/ .

Si vous faites ça :

cd /home/user/scripts
./current

Il s'imprimera : /home/user/scripts/ Mais, si tu fais ça :

cd /home/user/
scripts/current

La sortie sera : /home/user/

Quant aux solutions possibles, j'en ai trouvé quelques-unes utiles :

  • Référez-vous aux ressources de votre projet relatives au classpath, voir ClassLoader.getResourceAsStream() pour plus d'informations
  • Faites référence à vos ressources de configuration, comme les fichiers de propriétés et autres, par rapport au répertoire d'origine de l'utilisateur.
  • Mettez tous les autres emplacements, tels que le chemin du répertoire des médias et similaires au fichier de configuration du point ci-dessus.
  • Si toutes les autres options ne sont pas disponibles ou si leur utilisation n'est pas pratique. getClass().getProtectionDomain().getCodeSource().getLocation().getPath() . Pour en savoir plus sur cette approche et sur certains problèmes éventuels, cliquez ici : Comment obtenir le chemin d'un fichier JAR en cours d'exécution ?

3voto

Vallabh Patade Points 2278

C'est parce que lorsque vous exécutez à partir de la classe principale tout va bien, mais ce code s'exécute sur le serveur, il cherche dans le répertoire courant et la structure du répertoire courant est Apache 'bin' à partir duquel vous avez démarré le serveur (run.bat).

2voto

goravine Points 268

Vous pouvez utiliser ce code

String absolutePath = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
        absolutePath = absolutePath.substring(0, absolutePath.lastIndexOf("/"));

ce code fonctionne déjà pour moi ! il retournera le chemin complet du dossier sous Windows ou linux.

0voto

pratikch Points 672

Nous parlons ici d'un contexte différent. 1. Exécution de l'application en mode autonome. 2. Exécution de l'application dans un conteneur côté serveur. Dans le cas n°1, l'application est exécutée à partir du répertoire dans lequel elle est invoquée.

Mais dans le cas #2, l'application est exécutée relativement au conteneur, donc vous voyez l'emplacement du répertoire du serveur. Cela protège également le code de l'application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X