Obtenir le répertoire de travail courant en Java


729

Je veux accéder à mon répertoire de travail actuel à l'aide

String current = new java.io.File(".").getCanonicalPath(); 
     System.out.println("Current dir:"+current); 
String currentDir = System.getProperty("user.dir"); 
     System.out.println("Current dir using System:" +currentDir); 

OutPut:

Current dir: C:\WINDOWS\system32 
Current dir using System: C:\WINDOWS\system32 

Ma sortie n'est pas correct, car le lecteur C est pas mon répertoire courant. Besoin d'aide à cet égard.

  0

pouvez-vous coller ici ce que vous voyez lorsque vous exécutez la commande 'cd' sur votre invite de commande lorsque vous exécutez cela? 02 févr.. 112011-02-02 05:33:27

+2

Qu'est-ce que vous essayez d'accomplir en accédant au répertoire de travail? Pourrait-il être fait en utilisant le chemin de la classe à la place?Par exemple, si vous devez lire un fichier texte sur le système de fichiers, vous pouvez le trouver facilement lorsqu'il se trouve sur le chemin de la classe. 02 févr.. 112011-02-02 05:53:18

+1

comment? Pourriez-vous élaborer s'il vous plaît? 31 oct.. 122012-10-31 23:09:28

  0

Pour plus d'informations sur l'accès à un fichier sur le chemin d'accès aux classes, voir http://stackoverflow.com/questions/1464291/how-to-really-read-text-file-from-classpath-in-java 17 janv.. 162016-01-17 12:47:38

+4

À des fins de débogage, le répertoire de travail pourrait être utile pour savoir si le programme ne semble pas pouvoir accéder aux fichiers existants. 17 mars. 162016-03-17 13:49:49

  0

Les deux méthodes (et les méthodes ci-dessous) semblent correctes. Si vous obtenez le répertoire système comme CWD, cela peut être dû à un encapsuleur qui fait un CD avant de démarrer Java. Par exemple, javapath pourrait le faire. Spécifiez le chemin vers java.exe vers le répertoire Java_: home actuel pour éviter cela. 20 nov.. 162016-11-20 17:14:26

  0

@Qazi J'ai posté une solution qui semble fonctionner comme charme :)! N'hésitez pas à commenter pour toute amélioration ... 17 janv.. 172017-01-17 15:57:39

2

Le répertoire de travail actuel est défini différemment dans différentes implémentations Java. Pour certaines versions antérieures à Java 7, il n'y avait pas de moyen cohérent d'obtenir le répertoire de travail. Vous pouvez contourner ce problème en lançant le fichier Java avec -D et définir une variable pour contenir l'info

Quelque chose comme

java -D com.mycompany.workingDir="%0" 

Ce n'est pas tout à fait raison, mais vous voyez l'idée. Puis System.getProperty("com.mycompany.workingDir") ...

+5

Pas pertinent à la question. 15 mai. 132013-05-15 14:28:10

+1

Cela a une signification pour Java - c'est l'emplacement sur le disque où les fichiers que vous ouvrez avec des chemins relatifs sont relatifs. 29 juil.. 132013-07-29 16:36:47

+2

Oui, cela a une signification. Mes mots ont été quelque peu mal choisis. Mais vous manquez le point - avant Java 7, il n'y avait aucun moyen de connaître le répertoire de travail actuel, et différentes implémentations les définissent ... différemment ... 25 juin. 142014-06-25 03:59:44


27

Qu'est-ce qui vous fait penser que c: \ windows \ system32 n'est pas votre répertoire actuel? La propriété user.dir doit être explicitement le "répertoire de travail actuel de l'utilisateur". En d'autres termes, à moins que vous ne lanciez Java à partir de la ligne de commande, c: \ windows \ system32 est probablement votre CWD. C'est-à-dire que si vous double-cliquez pour démarrer votre programme, il est peu probable que le CWD soit le répertoire à partir duquel vous double-cliquez.

Édition: Il semble que cela ne soit vrai que pour les anciennes versions Windows et/ou Java.

+5

Pour moi user.dir est le répertoire où je le lance en double-cliquant 12 févr.. 132013-02-12 17:10:32

+1

Cela ne semble pas être vrai, du moins pas sur mon ordinateur Windows 7 utilisant Java 7. 'user.dir' est toujours le dossier où j'ai double-cliqué sur le fichier jar. 25 févr.. 152015-02-25 09:40:04

  0

voir la réponse http://stackoverflow.com/a/28149916/1005652 30 mai. 152015-05-30 10:15:38


850
public class JavaApplication1 { 
    public static void main(String[] args) { 
     System.out.println("Working Directory = " + 
       System.getProperty("user.dir")); 
    } 
} 

Cette imprimera une initialisation chemin absolu complet où votre demande.

+5

Le démarreur de fil a déjà essayé cela en vain. 26 oct.. 122012-10-26 14:20:54

+19

@ubuntudroid: c'est pourquoi j'ai mentionné spécifiquement qu'il affichera le chemin à partir duquel l'application a été initialisée. Je suppose que le démarreur de thread exécute directement le programme/jar après le lancement de l'invite commnad (qui est essentiellement à C: \ WINDOWS \ system32). J'espère que vous comprenez mon point de vue. En supposant que vous avez downvoted, appréciez qu'au moins vous aimiez laisser une réponse. :) 29 oct.. 122012-10-29 14:20:45

+1

user.dir obtiendra le chemin d'accès au dossier dans lequel le processus a été lancé. Pour obtenir le chemin d'accès réel au dossier principal de l'application, voir ma réponse ci-dessous. 15 mai. 132013-05-15 14:31:07

  0

Le problème avec la propriété "user.dir" est, dès que quelqu'un le passe comme '-Duser.dir = ...' ou le définir dans le code avec 'System.setProperty (" user.dir ", ...) 'Tout le code qui s'y appuie échoue. 30 déc.. 142014-12-30 12:43:49

+1

Je veux dire "tout le code qui s'y appuie ** pour trouver le répertoire courant ** échoue". Pas tout le code en général. (Je devais ralentir pour éditer le commentaire original) 30 déc.. 142014-12-30 12:55:56

  0

Le code ci-dessus fonctionnera-t-il correctement dans RHEL 5 ?? 03 févr.. 152015-02-03 10:08:15

+13

@SubOptimal si l'utilisateur a défini -Duser.dir, propable qu'il souhaite exécuter dans le répertoire de travail personnalisé. 18 avril. 152015-04-18 18:58:20

  0

@barwnikk Je suis entièrement d'accord avec vous. Dans ce cas, l'utilisateur ne devrait pas s'attendre à obtenir le répertoire à partir duquel 'java' a été appelé (il ne doit pas être celui où l'exécutable' java' est sotred) par 'System.getProperty (" user.dir ")'. Ce que je voulais dire tout code qui repose sur ce fait pourrait ne pas se comporter comme prévu. 20 avril. 152015-04-20 13:49:42

  0

@indyaah Enfait cette réponse est fausse, il y a une différence subtile entre un répertoire de travail utilisateur et un répertoire de travail en cours d'un processus système (cwd); la plupart du temps, le "user.dir" pointe vers le cwd d'un processus (java); mais "user.dir" a des sémantiques différentes et ne doit pas être utilisé pour obtenir le cwd d'un processus java; btw: il y a plus de propriétés disponibles pour le processus java https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html juste pour la référence 30 mai. 152015-05-30 10:10:08

  0

J'ai 'null' en utilisant' System.out.println (System .getProperty ("user.dir")) ' 10 mai. 172017-05-10 09:22:13

  0

Downvote pour ne pas expliquer assez comment System.getProperty (" user.dir ") fonctionne. 23 oct.. 172017-10-23 19:37:26


2

J'espère que vous voulez accéder au répertoire en cours, y compris le paquet à savoir si votre programme Java est en c:\myApp\com\foo\src\service\MyTest.java et que vous voulez imprimer jusqu'à c:\myApp\com\foo\src\service alors vous pouvez essayer le code suivant:

String myCurrentDir = System.getProperty("user.dir") 
      + File.separator 
      + System.getProperty("sun.java.command") 
        .substring(0, System.getProperty("sun.java.command").lastIndexOf(".")) 
        .replace(".", File.separator); 
    System.out.println(myCurrentDir); 

Remarque : Ce code est uniquement testé dans Windows avec Oracle JRE.

+6

Il ne serait pas justifié de baisser cette réponse. S'il vous plaît pensez plus attentivement avant de poster. Votre code est cassé, à moins que tous ces sont vrai: 1. le JRE est Oracle, sinon il n'y aura pas de propriété système "sun.java.command" → NPE; 2. le système d'exploitation est Windows (utilisez 'File.separator' à la place, ou un constructeur' File' multi-arguments); 3. le chemin de classe est spécifié sur la ligne de commande, et le 'répertoire courant incluant le paquet' (??) est: a. spécifié en premier, b. spécifié absolument, c. correspond exactement à la CWD (même avec l'insensibilité à la casse de Windows), et d. est un descendant de la CWD 15 mai. 132013-05-15 02:43:37

+1

@MichaelScheper: Ooouch 2 votes bas pour une erreur mineure ... qui fait mal mec.Cela a été fait et j'ai maintenant mis à jour ma réponse :) 05 juin. 132013-06-05 15:22:18

  0

Cela concerne les points 1 et 2. Mais à moins de manquer quelque chose, vous comptez toujours sur le chemin de classe spécifié dans la ligne de commande (pas dans une variable d'environnement) , et pour le 'répertoire courant incluant le paquet' (j'avoue que je ne comprends pas vraiment ce que tu veux dire par là) étant un descendant de spécifiquement le premier élément du classpath. Et le problème de correspondance des cas reste. Je suis désolé si mon commentaire ne m'a pas été utile; J'ai sacrifié la clarté pour rester dans la limite du nombre de commentaires. 06 juin. 132013-06-06 04:17:39

  0

@Inversus, il ne "fonctionne parfaitement" que dans certains environnements; vous venez juste d'avoir la chance de le tester en tant que tel. L'écriture de logiciels qui échouent dans des environnements d'exécution légitimes n'est pas une bonne pratique, même lorsque votre ensemble d'environnements de test n'est pas assez vaste pour les inclure. 10 avril. 142014-04-10 02:07:21

  0

@CharlesDuffy Vous avez raison, ce n'est pas une bonne pratique. Heureusement, cette solution "solving [mon] problème spécifique" ne l'a pas fait "échouer dans des environnements d'exécution légitimes". En fait, cela m'a aidé à résoudre un tel problème et à écrire un code plus robuste, en plus de résoudre le problème très spécifique que j'avais (ce qui n'était que légèrement lié à cette question/réponse). Je suppose que j'étais juste chanceux de le trouver. 24 avril. 142014-04-24 23:32:31


288

Voir: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

En utilisant java.nio.file.Path et java.nio.file.Paths, vous pouvez faire ce qui suit pour montrer ce que Java pense est votre chemin actuel. Ceci pour 7 et plus, et utilise NIO.

Path currentRelativePath = Paths.get(""); 
String s = currentRelativePath.toAbsolutePath().toString(); 
System.out.println("Current relative path is: " + s); 

Ce sorties Current relative path is: /Users/george/NetBeansProjects/Tutorials que dans mon cas est celui où je courais la classe de. Construire des chemins de manière relative, en n'utilisant pas de séparateur principal pour indiquer que vous construisez un chemin absolu, utilisera ce chemin relatif comme point de départ.

+2

Le premier n'a pas été vérifié, mais le second aura en réalité votre dossier personnel. Pas le répertoire de travail en cours dans lequel l'application est en cours d'exécution. 15 mai. 132013-05-15 14:22:21

+10

Veuillez ne pas confondre le répertoire personnel de l'utilisateur ("user.home",/Users/george dans votre cas) et le répertoire de travail actuel ("user.dir", qui sera le répertoire à partir duquel vous avez démarré la JVM pour votre application, donc pourrait être quelque chose comme par exemple/Users/george/workspace/FooBarProject). 20 sept.. 132013-09-20 10:19:04

  0

Je préfère de cette façon. Quand j'ai besoin du parent du répertoire de travail, ceci ne fonctionne pas: 'Paths.get (" "). GetParent()', il donne 'null'. Au lieu de cela cela fonctionne: 'Paths.get (" "). ToAbsolutePath(). GetParent()'. 16 oct.. 162016-10-16 08:47:25


21
this.getClass().getClassLoader().getResource("").getPath() 
+11

Lance un NPE lorsque je lance mon application à partir d'un fichier JAR en double-cliquant dessus. 02 août. 132013-08-02 16:34:09

+1

Cela ne fonctionne pas non plus dans un contexte statique 25 juin. 152015-06-25 15:51:05

+2

@djthoms Supprimez simplement 'this', et cela fonctionnera. 03 sept.. 152015-09-03 23:21:30

+1

Renvoie '" "' si l'application est exécutée à partir d'un fichier JAR ou d'un élément CLASSPATH. Pas ce qui a été demandé. 01 oct.. 172017-10-01 02:13:18


26

C'est la solution pour moi

File currentDir = new File(""); 
  0

Cela a des effets secondaires lorsque vous utilisez un objet File en tant que parent d'un autre fichier: new File (nouveau fichier (""), "subdir") ne fonctionnera pas comme prévu 17 oct.. 142014-10-17 14:22:30

+10

Pour résoudre ce problème, utilisez 'new File (" ") .getAbsoluteFile() 'à la place. 17 oct.. 142014-10-17 14:34:25

+2

Pour ce que ça vaut, j'ai eu plus de chance avec File ("."). 02 déc.. 142014-12-02 15:51:53

  0

[Comment définir un chemin relatif en Java] (http://stackoverflow.com/questions/14209085/how-to-define-a-relative-path-in-java) Cette page m'a aidé. J'ai aussi supposé que je devrais utiliser '/' lors de la création d'un chemin relatif. J'avais tort, ne commencez pas par '/'. '../' fonctionne également pour monter dans l'arborescence. 05 févr.. 162016-02-05 01:05:21

  0

@keshlam Je ne l'ai pas fait. Je suis allé avec '" "' et ai utilisé 'getAbsoluteFile()' 31 mars. 162016-03-31 09:13:55


-6

c'est le nom du répertoire courant

String path="/home/prasad/Desktop/folderName"; 
File folder = new File(path); 
String folderName=folder.getAbsoluteFile().getName(); 

c'est le chemin du répertoire courant

String path=folder.getPath(); 
+1

L'OP voulait le répertoire de travail actuel d'où l'application a été lancée. 05 nov.. 142014-11-05 16:21:11

  0

Ceci est * votre répertoire personnel *, pas le répertoire de travail actuel de quiconque, sauf peut-être le vôtre. Pas ce qui a été demandé. 01 oct.. 172017-10-01 02:15:49


11

Je suis sur Linux et obtenir le même résultat pour ces deux approches:

@Test 
public void aaa() 
{ 
    System.err.println(Paths.get("").toAbsolutePath().toString()); 

    System.err.println(System.getProperty("user.dir")); 
} 

Paths.get("") docs

System.getProperty("user.dir") docs


21

Utilisez CodeSource#getLocation().

Cela fonctionne également dans les fichiers JAR. Vous pouvez obtenir CodeSource par ProtectionDomain#getCodeSource() et le ProtectionDomain à son tour peut être obtenu par Class#getProtectionDomain().

public class Test { 
    public static void main(String... args) throws Exception { 
     URL location = Test.class.getProtectionDomain().getCodeSource().getLocation(); 
     System.out.println(location.getFile()); 
    } 
} 
+1

C'est une excellente alternative! J'ai regroupé mon application java dans une application Mac OS X en utilisant appbundler et je ne pouvais pas comprendre comment accéder aux données dans mon application en utilisant le code java. Cela fonctionne merci 13 août. 162016-08-13 11:21:50

  0

Je suis heureux d'entendre cela. et s'il vous plaît votez-moi si c'est utile pour vous 13 août. 162016-08-13 11:27:31

  0

Cela renvoie l'emplacement du fichier JAR. Pas ce qui a été demandé. 01 oct.. 172017-10-01 02:13:38


187

Ce qui suit fonctionne sur Java 7 et plus (voir here pour la documentation).

import java.nio.file.Paths; 

Paths.get(".").toAbsolutePath().normalize().toString(); 
+6

Refusée. Ceci est une bonne version de la réponse de geoO ci-dessus. Dommage qu'il ne fonctionne que dans Java 7+:/J'ai besoin de quelque chose comme ça pour Java 6. 12 oct.. 152015-10-12 16:55:52

+3

Comment est-ce mieux que le plus portable 'import java.io.File; Fichier ("."). GetAbsolutePath() '? 01 juin. 162016-06-01 15:20:33

+2

Quand vous dites portable, vous voulez dire que cela fonctionne dans Java 6 et plus tôt? 'Paths.get()' peut être considéré comme meilleur car il donne un accès direct à l'interface 'Path' plus puissante. 16 oct.. 162016-10-16 08:56:41

+5

Quel est l'avantage potentiel d'utiliser '.normalize()' dans ce contexte? 16 oct.. 162016-10-16 08:58:16

+2

@ OleV.V. À partir de Javadoc: (* normalize method *) 'Retourne un chemin qui est ce chemin avec des éléments de nom redondants éliminés.» 21 mai. 172017-05-21 17:46:25


-6

System.getProperty("java.class.path")


16

généralement, comme un objet de fichier:

File getCwd() { 
    return new File("").getAbsoluteFile(); 
} 

vous voudrez peut-être pleine chaîne qualifiée comme "D:/a/b/c" faire:

getCwd().getAbsolutePath() 
+1

Cela fonctionne bien dans les tests Android car Android ne comprend pas java.nio.file.Files. 29 sept.. 152015-09-29 06:15:54

+1

Cela devrait être la réponse acceptée 10 nov.. 152015-11-10 15:35:12

  0

Ne semble pas fonctionner pour moi dans un contexte statique (new File ("") throws NullPointerException) ..? 17 mars. 162016-03-17 13:54:50

+1

@nsandersen vous avez probablement utilisé un objet File incorrect: System.out.println (new java.io.File (""). GetAbsolutePath()); 24 mars. 162016-03-24 12:38:22


0

Aucune des réponses affichées ici n'a fonctionné pour moi. Voici ce qui a fait le travail:

java.nio.file.Paths.get(
    getClass().getProtectionDomain().getCodeSource().getLocation().toURI() 
); 

Edit: La version finale dans mon code:

URL myURL = getClass().getProtectionDomain().getCodeSource().getLocation(); 
java.net.URI myURI = null; 
try { 
    myURI = myURL.toURI(); 
} catch (URISyntaxException e1) 
{} 
return java.nio.file.Paths.get(myURI).toFile().toString() 
  0

voir http://stackoverflow.com/a/28149916/1005652 30 avril. 152015-04-30 11:36:12

  0

Cela renvoie l'emplacement du fichier JAR. Pas ce qui a été demandé. 01 oct.. 172017-10-01 02:14:54


0

Supposons que vous essayez de lancer votre projet dans Eclipse, ou NetBean ou autonome de la ligne de commande . J'ai écris une méthode pour corriger

public static final String getBasePathForClass(Class<?> clazz) { 
    File file; 
    try { 
     String basePath = null; 
     file = new File(clazz.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); 
     if (file.isFile() || file.getPath().endsWith(".jar") || file.getPath().endsWith(".zip")) { 
      basePath = file.getParent(); 
     } else { 
      basePath = file.getPath(); 
     } 
     // fix to run inside eclipse 
     if (basePath.endsWith(File.separator + "lib") || basePath.endsWith(File.separator + "bin") 
       || basePath.endsWith("bin" + File.separator) || basePath.endsWith("lib" + File.separator)) { 
      basePath = basePath.substring(0, basePath.length() - 4); 
     } 
     // fix to run inside netbean 
     if (basePath.endsWith(File.separator + "build" + File.separator + "classes")) { 
      basePath = basePath.substring(0, basePath.length() - 14); 
     } 
     // end fix 
     if (!basePath.endsWith(File.separator)) { 
      basePath = basePath + File.separator; 
     } 
     return basePath; 
    } catch (URISyntaxException e) { 
     throw new RuntimeException("Cannot firgue out base path for class: " + clazz.getName()); 
    } 
} 

Pour utiliser, partout où vous voulez obtenir le chemin de base pour lire le fichier, vous pouvez passer votre classe d'ancrage à la méthode ci-dessus, le résultat peut être la chose dont vous avez besoin: D

Best,

  0

WoW bro incroyable réponse !! Je l'ai pris un peu plus loin cependant, grâce à vous :) 17 janv.. 172017-01-17 15:47:53

  0

Cela renvoie l'emplacement du fichier JAR. Pas ce qui a été demandé. 01 oct.. 172017-10-01 02:14:44


2

Sur Linux lorsque vous exécutez un fichier jar de borne, ces deux retournera la même String: «/home/CurrentUs er ", peu importe où votre fichier JAR est. Cela dépend uniquement du répertoire que vous utilisez avec votre terminal lorsque vous démarrez le fichier jar.

Paths.get("").toAbsolutePath().toString(); 

System.getProperty("user.dir"); 

Si votre Class avec main serait appelé MainClass, essayez alors:

MainClass.class.getProtectionDomain().getCodeSource().getLocation().getFile(); 

Cela renverra un String avec chemin absolu du pot fichier.

  0

Ce qui n'est pas ce qui a été demandé. 01 oct.. 172017-10-01 02:14:35


2

Utilisation de Windows user.dir retourne le répertoire comme prévu, mais pas lorsque vous démarrez votre application avec des droits élevés (exécuter en tant qu'administrateur), dans ce cas, vous obtenez C: \ WINDOWS \ system32


1

Mention que est vérifié seulement dans Windows mais je pense que cela fonctionne parfaitement sur les autres systèmes d'exploitation [Linux,MacOs,Solaris] :).


j'avais .jar fichiers dans le même répertoire. Je voulais d'un fichier .jar pour démarrer l'autre fichier .jar qui se trouve dans le même répertoire.

Le problème est que lorsque vous démarrez à partir du cmd le répertoire en cours est system32.


Avertissements!

  • Le ci-dessous semble fonctionner assez bien dans tous les tests que je l'ai fait même avec le nom du dossier ;][[;'57f2g34g87-8+9-09!2#@!$%^^&() ou ()%&$%^@# il fonctionne bien.
  • J'utilise le ProcessBuilder au-dessous de la manière suivante:

..

//The class from which i called this was the class `Main` 
String path = getBasePathForClass(Main.class); 
String applicationPath= new File(path + "application.jar").getAbsolutePath(); 


System.out.println("Directory Path is : "+applicationPath); 

//Your know try catch here 
//Mention that sometimes it doesn't work for example with folder `;][[;'57f2g34g87-8+9-09!2#@!$%^^&()` 
ProcessBuilder builder = new ProcessBuilder("java", "-jar", applicationPath); 
builder.redirectErrorStream(true); 
Process process = builder.start(); 

//...code 

getBasePathForClass(Class<?> classs):

/** 
    * Returns the absolute path of the current directory in which the given 
    * class 
    * file is. 
    * 
    * @param classs 
    * @return The absolute path of the current directory in which the class 
    *   file is. 
    * @author GOXR3PLUS[StackOverFlow user] + bachden [StackOverFlow user] 
    */ 
    public static final String getBasePathForClass(Class<?> classs) { 

     // Local variables 
     File file; 
     String basePath = ""; 
     boolean failed = false; 

     // Let's give a first try 
     try { 
      file = new File(classs.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); 

      if (file.isFile() || file.getPath().endsWith(".jar") || file.getPath().endsWith(".zip")) { 
       basePath = file.getParent(); 
      } else { 
       basePath = file.getPath(); 
      } 
     } catch (URISyntaxException ex) { 
      failed = true; 
      Logger.getLogger(classs.getName()).log(Level.WARNING, 
        "Cannot firgue out base path for class with way (1): ", ex); 
     } 

     // The above failed? 
     if (failed) { 
      try { 
       file = new File(classs.getClassLoader().getResource("").toURI().getPath()); 
       basePath = file.getAbsolutePath(); 

       // the below is for testing purposes... 
       // starts with File.separator? 
       // String l = local.replaceFirst("[" + File.separator + 
       // "/\\\\]", "") 
      } catch (URISyntaxException ex) { 
       Logger.getLogger(classs.getName()).log(Level.WARNING, 
         "Cannot firgue out base path for class with way (2): ", ex); 
      } 
     } 

     // fix to run inside eclipse 
     if (basePath.endsWith(File.separator + "lib") || basePath.endsWith(File.separator + "bin") 
       || basePath.endsWith("bin" + File.separator) || basePath.endsWith("lib" + File.separator)) { 
      basePath = basePath.substring(0, basePath.length() - 4); 
     } 
     // fix to run inside netbeans 
     if (basePath.endsWith(File.separator + "build" + File.separator + "classes")) { 
      basePath = basePath.substring(0, basePath.length() - 14); 
     } 
     // end fix 
     if (!basePath.endsWith(File.separator)) { 
      basePath = basePath + File.separator; 
     } 
     return basePath; 
    } 
  0

Renvoie l'emplacement du fichier JAR. Pas ce qui a été demandé. 01 oct.. 172017-10-01 02:14:19

  0

@EJP L'emplacement du fichier .jar n'est pas le répertoire de travail courant du programme java? 05 oct.. 172017-10-05 22:36:21


10

Cela vous donnera le chemin de votre travail Répertoire:

Path path = FileSystems.getDefault().getPath("."); 

Et cela vous donnera le chemin vers un fichier appelé « toto.txt » dans le répertoire de travail:

Path path = FileSystems.getDefault().getPath("Foo.txt"); 

modifier Pour obtenir un chemin absolu à partir de la racine du système de fichiers:

Path path = FileSystems.getDefault().getPath("").toAbsolutePath(); 
+2

cela renvoie juste '.' pour moi. 01 févr.. 182018-02-01 00:53:14

  0

Oui, dans de nombreux systèmes, ce sera la référence au répertoire de travail. Pour obtenir le chemin absolu, vous pouvez ajouter une autre méthode appel Path chemin = FileSystems.getDefault(). GetPath ("."). ToAbsolutePath(); ' 01 févr.. 182018-02-01 19:49:59

  0

réponse modifiée basée sur le commentaire de John. 01 févr.. 182018-02-01 19:52:58

+1

Vous n'avez pas besoin de foo.txt, mettez juste une chaîne vide pour obtenir le répertoire 05 mars. 182018-03-05 02:41:19