Comment utiliser la commande" cd " avec Java runtime?

j'ai créé une application java autonome dans laquelle j'essaie de changer le répertoire en utilisant la commande" cd " dans le terminal Ubuntu 10.04. 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

est-ce que quelqu'un peut me dire comment le mettre en œuvre?

46
demandé sur Joachim Sauer 2011-02-03 13:02:02

6 réponses

il n'y a pas d'exécutable appelé cd , parce que ne peut pas être implémenté dans un processus séparé.

le problème est que chaque processus a son propre répertoire de travail courant et la mise en œuvre de cd comme un processus séparé ne changerait jamais que traite répertoire de travail courant.

dans un programme Java vous ne peut pas changer votre travail actuel répertoire et vous ne devriez pas avoir besoin. Utilisez simplement des chemins de fichier absolus.

le seul cas où le répertoire de travail actuel est l'exécution d'un processus externe (en utilisant ProcessBuilder ou Runtime.exec() ). Dans ces cas, vous pouvez spécifier explicitement le répertoire de travail à utiliser pour le nouveau processus lancé.( ProcessBuilder.directory() et le à trois arguments Runtime.exec() respectivement).

Note: le présent le répertoire de travail peut être lu à partir de la propriété du système user.dir . Vous pourriez vous sentir tenté de mettre cette propriété du système. Notez que cela conduira à très mauvaises incohérences , parce que ce n'est pas signifiait pour être writable .

50
répondu Joachim Sauer 2017-05-23 11:54:51

voir le lien ci-dessous (ceci explique comment le faire):

http://alvinalexander.com/java/edu/pj/pj010016

c'est à dire :

String[] cmd = { "/bin/sh", "-c", "cd /var; ls -l" };
Process p = Runtime.getRuntime().exec(cmd);
15
répondu user518066 2016-08-11 10:28:16

avez-vous exploré cette commande exec pour un exécution java, créer un objet fichier avec le chemin vers lequel vous voulez" cd " puis l'entrer comme troisième paramètre pour la méthode exec.

public Process exec(String command,
                String[] envp,
                File dir)
         throws IOException

exécute la commande de chaîne spécifiée dans un processus séparé avec l'environnement spécifié et le répertoire de travail.

il s'agit d'une méthode pratique. 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 de commande.

plus précisément, la chaîne de commande est cassée en jetons en utilisant un StringTokenizer créé par l'appel New StringTokenizer(commande) sans autre modification des catégories de caractères. Les jetons produits par le tokenizer sont alors placés dans le nouveau tableau de chaînes cmdarray, dans le même ordre.

Parameters:
    command - a specified system command.
    envp - array of strings, each element of which has environment variable settings in the format name=value, or null if the subprocess should inherit the environment of the current process.
    dir - the working directory of the subprocess, or null if the subprocess should inherit the working directory of the current process. 
Returns:
    A new Process object for managing the subprocess 
Throws:
    SecurityException - If a security manager exists and its checkExec method doesn't allow creation of the subprocess 
    IOException - If an I/O error occurs 
    NullPointerException - If command is null, or one of the elements of envp is null 
    IllegalArgumentException - If command is empty
12
répondu Deepak Prathapani 2014-07-18 07:24:14

Cette commande fonctionne très bien

Runtime.getRuntime().exec(sh -c 'cd /path/to/dir && ProgToExecute)
7
répondu mateusz.zbikowski 2015-10-21 19:39:18

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 fallait que je fasse un" cd " vers un répertoire spécifique pour que l'application cible puisse fonctionner correctement.

0
répondu Rami Stefanidis 2017-05-03 19:19:02

Essayez D'Utiliser:

Runtime.getRuntime.exec("cmd /c cd path"); 

ouvré

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"); 

ci-dessous n'a pas de travail Tout en utilisant la commande array n'a pas fonctionné

String[] 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);

FYI 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

0
répondu Dheeraj Sachan 2017-08-22 06:45:00