Je veux accéder à mon répertoire de travail actuel en utilisant java.
Mon code:
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);
Production:
Current dir: C:\WINDOWS\system32
Current dir using System: C:\WINDOWS\system32
Ma sortie n'est pas correcte car le lecteur C n'est pas mon répertoire actuel.
Comment obtenir le répertoire courant?
cd
commande sur votre invite de commande lorsque vous l'exécutez?Réponses:
Cela imprimera un chemin absolu complet à partir duquel votre application a été initialisée.
De la documentation :
java.io
le package résout les chemins d'accès relatifs à l'aide du répertoire utilisateur actuel. Le répertoire actuel est représenté comme une propriété système, c'est-à-dire,user.dir
et est le répertoire à partir duquel la JVM a été invoquée.la source
Voir: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html
En utilisant
java.nio.file.Path
etjava.nio.file.Paths
, vous pouvez faire ce qui suit pour montrer ce que Java pense être votre chemin actuel. Ceci pour 7 et plus, et utilise NIO.Cela génère
Current relative path is: /Users/george/NetBeansProjects/Tutorials
que dans mon cas, j'ai exécuté la classe. La construction de chemins d'une manière relative, en n'utilisant pas de séparateur de tête pour indiquer que vous construisez un chemin absolu, utilisera ce chemin relatif comme point de départ.la source
Paths.get("").getParent()
ça donnenull
. Au lieu de cela cela fonctionne:Paths.get("").toAbsolutePath().getParent()
.Les travaux suivants sur Java 7 et plus (voir ici pour la documentation).
la source
import java.io.File; File(".").getAbsolutePath()
?Paths.get()
peut être considérée comme meilleure en ce qu'elle donne un accès direct à l'Path
interface plus puissante ..normalize()
dans ce contexte?Returns a path that is this path with redundant name elements eliminated.
Cela vous donnera le chemin de votre répertoire de travail actuel:
Et cela vous donnera le chemin vers un fichier appelé "Foo.txt" dans le répertoire de travail:
Edit: Pour obtenir un chemin absolu du répertoire courant:
* Mise à jour * Pour obtenir le répertoire de travail actuel:
la source
Path path = FileSystems.getDefault().getPath(".").toAbsolutePath();
Path
objet pointant vers un fichier appelé.
à l'intérieur du répertoire de travail actuel. Utiliser une chaîne vide, plutôt que de"."
travailler pour moi.C'est la solution pour moi
la source
new File("").getAbsoluteFile()
plutôt./
lors de la création d'un chemin relatif. J'avais tort, ne commence pas/
.../
fonctionne également pour monter dans l'arborescence des répertoires..
.J'ai trouvé cette solution dans les commentaires qui est meilleure que les autres et plus portable:
Ou même
la source
Qu'est-ce qui vous fait penser que c: \ windows \ system32 n'est pas votre répertoire actuel? le
user.dir
propriété doit être explicitement le "répertoire de travail actuel de l'utilisateur".Autrement dit, sauf si vous démarrez Java à partir de la ligne de commande, c: \ windows \ system32 est probablement votre CWD. Autrement dit, 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.
Edit : Il semble que cela ne soit vrai que pour les anciennes fenêtres et / ou versions Java.
la source
user.dir
est toujours le dossier où j'ai double-cliqué sur le fichier jar.Utilisation
CodeSource#getLocation()
.Cela fonctionne également très bien dans les fichiers JAR. Vous pouvez obtenir
CodeSource
parProtectionDomain#getCodeSource()
et leProtectionDomain
tour peut être obtenu parClass#getProtectionDomain()
.la source
la source
""
si l'application s'exécute à partir d'un fichier JAR ou d'un élément CLASSPATH. Pas ce qui était demandé.getClass()
est une méthode objet, donc dans un contexte statique, la simple suppression dethis
ne fonctionne pas. Vous devez vous référer explicitement à la classe dans laquelle vous vous trouvezMyClass.class.getClassLoader().....
.généralement, en tant qu'objet File:
vous voudrez peut-être avoir une chaîne complète comme "D: / a / b / c":
la source
Je suis sous Linux et j'obtiens le même résultat pour ces deux approches:
Paths.get("")
docsSystem.getProperty("user.dir")
docsla source
Sous Linux, lorsque vous exécutez un fichier jar à partir du terminal , ces deux paramètres renverront le même
String
: "/ home / CurrentUser" , peu importe où se trouve votre fichier jar. Cela dépend uniquement du répertoire courant que vous utilisez avec votre terminal, lorsque vous démarrez le fichier jar.Si votre
Class
avecmain
est appeléMainClass
, essayez:Cela renverra un
String
avec chemin absolu du pot fichier.la source
L'utilisation de Windows user.dir renvoie le répertoire comme prévu, mais PAS lorsque vous démarrez votre application avec des droits élevés (exécuté en tant qu'administrateur), dans ce cas, vous obtenez C: \ WINDOWS \ system32
la source
J'espère que vous souhaitez accéder au répertoire actuel, y compris le package, c'est-à-dire si votre programme Java est dans
c:\myApp\com\foo\src\service\MyTest.java
et que vous souhaitez imprimer jusque-c:\myApp\com\foo\src\service
là, vous pouvez essayer le code suivant:Remarque: Ce code n'est testé que sous Windows avec Oracle JRE.
la source
File.separator
plutôt, ou unFile
constructeur multi-arguments ); 3. le chemin d'accès aux classes est spécifié sur la ligne de commande et le «répertoire en cours incluant le package» (??) 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 CWDMentionnez qu'il est enregistré uniquement
Windows
mais je pense que cela fonctionne parfaitement sur d'autres systèmes d'exploitation [Linux,MacOs,Solaris
] :).J'avais 2
.jar
fichiers dans le même répertoire. Je voulais à partir d'un.jar
fichier pour démarrer l'autre.jar
fichier qui se trouve dans le même répertoire.Le problème est que lorsque vous le démarrez à partir du
cmd
répertoire en cours, c'estsystem32
.;][[;'57f2g34g87-8+9-09!2#@!$%^^&()
ou()%&$%^@#
cela fonctionne bien.ProcessBuilder
avec le ci-dessous comme suit:🍂 ..
🍂
getBasePathForClass(Class<?> classs)
:la source
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'existait aucun moyen cohérent d'obtenir le répertoire de travail. Vous pouvez contourner cela en lançant un fichier Java avec
-D
et en définissant une variable pour contenir les informationsQuelque chose comme
Ce n'est pas tout à fait vrai, mais vous voyez l'idée. Alors
System.getProperty("com.mycompany.workingDir")
...la source
supposons que vous essayez d'exécuter votre projet dans eclipse, ou netbean ou autonome à partir de la ligne de commande. J'ai écrit une méthode pour y remédier
Pour l'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
Meilleur,
la source
Aucune des réponses publiées ici n'a fonctionné pour moi. Voici ce qui a fonctionné:
Edit: La version finale de mon code:
la source
Ceci est ma balle d'argent quand le moment de confusion se propage. (Appelez-le comme première chose principale). Par exemple, JVM est glissé pour être une version différente par IDE. Cette fonction statique recherche le processus PID en cours et ouvre VisualVM sur ce pid. La confusion s'arrête là parce que vous voulez tout et vous l'obtenez ...
la source
System.getProperty("java.class.path")
la source
c'est le nom du répertoire actuel
c'est le chemin du répertoire courant
la source