2010-12-14 75 views
13

J'utilise une application Java depuis la ligne de commande. Puis-je spécifier un argument de ligne de commande pour définir le répertoire courant en cours à quelque chose d'autre que celui où l'application va réellement s'exécuter?Pouvez-vous définir le répertoire en cours d'exécution à partir de la ligne de commande java?

+0

Vous ne savez pas s'il s'agit d'un doublon, mais peut être utile http://stackoverflow.com/questions/840190/changing-the-current-working-directory-in-java – khachik

+0

Oui, cela peut être utile. new File (parent, chemin) peut fonctionner. Je vais devoir essayer. Raison pour laquelle j'ai posté cette question est que j'essaie d'utiliser un profileur sur une DLL que mon application charge. Comme je dois essentiellement profiler java.exe, le répertoire de travail actuel est défini dans mon dossier jdk et supprime mes chemins relatifs dans mon application. – user538442

+0

Votre profileur doit avoir une option pour définir le répertoire de départ. Ou peut-être est-il possible d'écrire un fichier BAT et d'indiquer à profiler de l'exécuter? –

Répondre

0

Si vous souhaitez modifier le répertoire en cours, vous devrez utiliser JNI et invoquer une API native à partir de votre code Java. Par exemple, pour Windows que vous utilisez SetCurrentDirectory

+0

J'utilise JNI donc cela pourrait être une solution possible. – user538442

+0

Cela rendrait votre code complètement non portable, bien sûr. –

3

Si tout est possible, je préfère utiliser un script pour exécuter l'application Java et définissez le répertoire dans le script:

#!/bin/sh 
cd <your dir> 
java <some arguments> 

La JNI solution peut affecter tous types de chemins relatifs dans votre application; par exemple le chemin de classe que vous avez entré.

33

Il existe un argument JVM -Duser.dir qui peut être utilisé pour définir le répertoire de travail de la machine virtuelle Java.

0

J'ai trouvé cet article et il m'a aidé à résoudre mon problème. Bien que je voulais partager quelque chose de spécifique sur IntelliJ qui pourrait trébucher quelqu'un d'autre.

J'ai posté une photo ci-dessous où le drapeau -Duser.dir est utilisé et aussi le champ de texte Répertoire de travail est rempli.

"Working Directory" field has lower precedence than the -Duser.dir flag.

Dans cette situation, le répertoire de travail sera mis à "JarLearning" plutôt que "2ndTry".