web-dev-qa-db-fra.com

Comment utiliser la commande "cd" en utilisant le runtime Java?

J'ai créé une application Java autonome dans laquelle j'essaie de changer de répertoire à l'aide de la commande "cd" du 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

Quelqu'un peut-il me dire s'il vous plaît comment le mettre en œuvre? 

47
Antrromet

Voir le lien ci-dessous (ceci explique comment 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
user518066

Avez-vous exploré cette commande exec pour Java Runtime? Créez un objet fichier avec le chemin que vous souhaitez "cd", puis saisissez-le comme troisième paramètre de 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 et le répertoire de travail spécifiés.

C'est une méthode pratique. Un appel de la forme exec (commande, envp, dir) se comporte exactement de la même manière que l’exécutant d’appel (cmdarray, envp, dir), où cmdarray est un tableau de tous les jetons de la commande.

Plus précisément, la chaîne de commande est décomposée en jetons à l'aide d'un StringTokenizer créé par l'appel de nouveau StringTokenizer (commande) sans aucune modification supplémentaire des catégories de caractères. Les jetons produits par le tokenizer sont ensuite 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
optimus0127

Cette commande fonctionne très bien

Runtime.getRuntime().exec(sh -c 'cd /path/to/dir && ProgToExecute)
7

Essayez d'utiliser:

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

Cela a fonctionné

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

La liste ci-dessous n'a pas fonctionné L'utilisation de 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 utilise un utilitaire pour vérifier le système d’exploitation si les fenêtres ci-dessus fonctionnent pour des applications autres que windows, supprime cmd et / c

0
Dheeraj Sachan

En utilisant l'une des méthodes du constructeur de processus, nous pourrions passer le répertoire dans lequel nous nous attendons à ce que la cmd soit exécutée. S'il vous plaît voir l'exemple ci-dessous. En outre, vous pouvez mentionner le délai d'expiration du processus, à l'aide de la méthode wait for.

ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", cmd).directory(new File(path));

        Process p = builder.start();

        p.waitFor(timeoutSec, TimeUnit.SECONDS);

Dans le code ci-dessus, vous pouvez passer l'objet fichier du chemin [où nous nous attendons à ce que la commande soit exécutée] à la méthode directory de ProcessBuilder

0
TechDog

J'avais résolu ce problème en demandant à l'application Java d'exécuter un script sh qui se trouvait dans le même répertoire puis dans le script sh avait effectué le "cd".

Il était nécessaire que je fasse un "cd" dans un répertoire spécifique pour que l'application cible puisse fonctionner correctement.

0
Rami Del Toro