Disons que j'ai ma classe principale C:\Users\Justian\Documents\
. Comment puis-je faire en sorte que mon programme montre qu'il est inclus C:\Users\Justian\Documents
?
Le codage en dur n'est pas une option - il doit être adaptable s'il est déplacé vers un autre emplacement.
Je veux vider un tas de fichiers CSV dans un dossier, faire reconnaître tous les fichiers par le programme, puis charger les données et les manipuler. Je veux vraiment savoir comment accéder à ce dossier.
java
path
working-directory
Justian Meyer
la source
la source
Réponses:
Une façon serait d'utiliser la propriété système
System.getProperty("user.dir");
qui vous donnera "Le répertoire de travail actuel lorsque les propriétés ont été initialisées". C'est probablement ce que vous voulez. pour savoir où lajava
commande a été émise, dans votre cas dans le répertoire avec les fichiers à traiter, même si le fichier .jar réel peut résider ailleurs sur la machine. Avoir le répertoire du fichier .jar réel n'est pas très utile dans la plupart des cas.Ce qui suit imprimera le répertoire actuel à partir duquel la commande a été appelée, quel que soit l'emplacement du fichier .class ou .jar dans lequel se trouve le fichier .class.
si vous êtes dans
/User/me/
et que votre fichier .jar contenant le code ci-dessus est dans/opt/some/nested/dir/
la commandejava -jar /opt/some/nested/dir/test.jar Test
sera sortiecurrent dir = /User/me
.Vous devriez également regarder en prime l'utilisation d'un bon analyseur d'arguments de ligne de commande orienté objet. Je recommande vivement JSAP , le Java Simple Argument Parser. Cela vous permettrait d'utiliser
System.getProperty("user.dir")
et de transmettre quelque chose d'autre pour annuler le comportement. Une solution beaucoup plus maintenable. Cela rendrait le passage dans le répertoire à traiter très facile à faire, et serait capable de se rabattreuser.dir
si rien n'était passé.la source
user.dir
est beaucoup plus facile à utiliser. System.getProperty ("user.dir");Utilisez
CodeSource#getLocation()
. Cela fonctionne également très bien dans les fichiers JAR. Vous pouvez obtenirCodeSource
parProtectionDomain#getCodeSource()
et leProtectionDomain
à son tour peut être obtenu parClass#getProtectionDomain()
.Mise à jour selon le commentaire de l'OP:
Cela nécessiterait un codage en dur / la connaissance de leur chemin relatif dans votre programme. Pensez plutôt à ajouter son chemin au chemin de classe afin que vous puissiez utiliser
ClassLoader#getResource()
Ou pour passer son chemin comme
main()
argument.la source
getLocation()
méthode. D'autres ne fonctionneront évidemment pas.Imprime quelque chose comme:
Notez que
File.getCanonicalPath()
jette une IOException cochée mais cela supprimera des choses comme../../../
la source
la source
Je viens d'utiliser:
...
la source
Paths.get("").toAbsolutePath();
Paths.get("my/file").toAbsolutePath()
j'obtiens/my/file
, ce n'est certainement pas le cwd.Si vous souhaitez obtenir votre répertoire de travail actuel, utilisez la ligne suivante
la source
Si vous voulez le chemin absolu du code source actuel, ma suggestion est:
la source
Qui a dit que votre classe principale était dans un fichier sur un disque dur local? Les classes sont plus souvent regroupées dans des fichiers JAR, et parfois chargées sur le réseau ou même générées à la volée.
Alors qu'est-ce que tu veux vraiment faire? Il existe probablement un moyen de le faire qui ne fait pas d'hypothèses sur l'origine des classes.
la source