Comment utiliser la commande “cd” à l'aide de Java runtime?
J'ai créé une application java autonome dans lequel je suis en train de changer le répertoire à l'aide de la commande "cd" dans Ubuntu 10.04 terminal. J'ai utilisé le code suivant.
String[] command = new String[]{"cd",path};
Process child = Runtime.getRuntime().exec(command, null);
Mais le code ci-dessus donne l'erreur suivante
Exception in thread "main" java.io.IOException: Cannot run program "cd": java.io.IOException: error=2, No such file or directory
Quelqu'un peut-il me dire comment faire pour la mettre en œuvre?
- Une fuite a été de commencer un nouveau shell et le feu à toutes vos commandes de leur - webmasterworld.com/linux/3613813.htm
Vous devez vous connecter pour publier un commentaire.
Il n'existe pas de fichier exécutable appelé
cd
, parce qu'il ne peut pas être mis en œuvre dans un processus séparé.Le problème est que chaque processus a son propre répertoire de travail actuel et la mise en œuvre de
cd
en tant que processus distinct ne voulut jamais changer que processus répertoire de travail courant.Dans un programme Java, vous ne peut pas changer votre répertoire de travail actuel et vous ne devriez pas en avoir besoin. Utilisez simplement absolue chemins d'accès de fichier.
Le seul cas où le répertoire de travail courant des questions de l'exécution d'un processus externe (à l'aide de
ProcessBuilder
ouRuntime.exec()
). Dans ces cas, vous pouvez spécifier le répertoire de travail à utiliser pour la nouvelle a commencé le processus de façon explicite (ProcessBuilder.répertoire()
et la trois-argumentde l'Exécution.exec()
respectivement).Remarque: le répertoire de travail actuel peut être lu à partir de la le système de la propriété
user.dir
. Vous pourriez vous sentir tentés de ensemble que le système de la propriété. Notez que cela conduira à très mauvais incohérences, parce que ce n'est pas signifie pour être accessible en écriture.Runtime r = Runtime.getRuntime();
r.exec("cmd /c pdftk C:\\tmp\\trashhtml_to_pdf\\b.pdf C:\\tmp\\trashhtml_to_pdf\\a.pdf cat output C:\\tmp\\trashhtml_to_pdf\\d.pdf");
Tout à l'aide du tableau de commande n' fonctionne PASString[] cmd = {"cmd /c pdftk C:\\tmp\\trashhtml_to_pdf\\b.pdf C:\\tmp\\trashhtml_to_pdf\\a.pdf cat output C:\\tmp\\trashhtml_to_pdf\\d.pdf"};
r.exec(cmd);
Voir le lien ci-dessous (c'est ce qui explique comment faire):
http://alvinalexander.com/java/edu/pj/pj010016
c'est à dire :
Avez-vous exploré cette commande exec pour un environnement d'Exécution java, Créer un fichier objet avec le chemin que vous voulez "cd", puis l'entrée d'un troisième paramètre de la méthode exec.
Exécute la chaîne spécifiée dans la commande dans un processus séparé avec l'environnement et le répertoire de travail.
C'est une méthode de convenance. Un appel de la forme exec(commande, envp, dir) se comporte exactement de la même manière que l'invocation exec(cmdarray, envp, dir), où cmdarray est un tableau de tous les jetons dans la commande.
Plus précisément, la chaîne de commande est divisé en jetons à l'aide d'un StringTokenizer créé par l'appel de new StringTokenizer(commande) avec aucune autre modification de l'catégories de caractères. Les jetons produits par le générateur de jetons sont placés dans le nouveau tableau de chaîne de cmdarray, dans le même ordre.
Cette commande fonctionne très bien
Runtime.getRuntime().exec("sh -c 'cd /path/to/dir && ProgToExecute'")
? Cela renvoie le code de sortie2
Essayez D'Utiliser:
Cela a fonctionné
Ci-dessous ne fonctionne pas
Alors que l'aide du tableau de commande ne fonctionne PAS
Pour info suis l'aide de l'utilitaire pour vérifier OS si ses fenêtres ci-dessus va travailler pour d'autres que windows supprimer cmd et /c
À l'aide de l'un des processus générateur de la méthode, nous avons pu passer le répertoire où nous nous attendons à la commande à exécuter. Veuillez voir l'exemple ci-dessous. Aussi , vous pouvez mentionner le délai d'attente pour le processus, en utilisant d'attente pour la méthode.
Dans le code ci-dessus, vous pouvez transmettre le dossier objet de la trajectoire[où nous nous attendons à la commande à exécuter] pour le répertoire de la méthode de ProcessBuilder
J'avais résolu ce problème en ayant l'application Java exécuter un script sh qui était dans le même répertoire, puis dans le script sh avait fait le "cd".
Il était nécessaire que je fais un "cd" pour un répertoire spécifique à l'application cible pu fonctionner correctement.