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?
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);
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
Cette commande fonctionne très bien
Runtime.getRuntime().exec(sh -c 'cd /path/to/dir && ProgToExecute)
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
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
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.