web-dev-qa-db-fra.com

Obtention du chemin du système de fichiers de la classe en cours d'exécution

Existe-t-il un moyen de déterminer l'emplacement actuel du système de fichiers de la classe exécutée à partir du code de cette classe, lors de l'exécution, étant donné qu'il est exécuté à l'aide de la commande Java?

Par exemple pour la classe suivante:

public class MyClass{
 public static void main(String[] args){\
   new MyClass().doStuff();
 }

 private void doStufF(){
   String path = ... // what to do here?!
   System.out.println("Path of class being invoked: " + path);
 }

}

Existe-t-il un moyen d'obtenir et d'imprimer le chemin d'accès correct dans le système de fichiers du fichier MyClass.class qui vient d'être appelé?

De même, si j'appelle un fichier jar depuis Java -jar commande, existe-t-il un moyen d'obtenir un chemin de fichier jar à partir des classes à l'intérieur de ce pot?

P.S.:Veuillez, ne faites aucune hypothèse sur le répertoire de travail à partir de laquelle la commande Java est invoquée!

59
Piotr Sobczyk

L'extrait de code suivant le fera pour vous:

final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

remplacez MyClass par votre classe main

L'objet File résultant f représente le .jar fichier exécuté. Vous pouvez utiliser cet objet pour que le parent trouve le répertoire que le .jar est dans.

94
user177800