61 votes

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

Quelqu'un peut-il me dire comment le mettre en œuvre ?

0 votes

Un moyen de s'en sortir était de démarrer un nouveau shell et d'y envoyer toutes vos commandes - webmasterworld.com/linux/3613813.htm

3voto

bobmarksie Points 1469

Ma solution préférée pour cela est de passer dans le répertoire que le Runtime dans lequel le processus se déroulera. Je créerais une petite méthode comme suit : -

    public static String cmd(File dir, String command) {
        System.out.println("> " + command);   // better to use e.g. Slf4j
        System.out.println();        
        try {
            Process p = Runtime.getRuntime().exec(command, null, dir);
            String result = IOUtils.toString(p.getInputStream(), Charset.defaultCharset());
            String error = IOUtils.toString(p.getErrorStream(), Charset.defaultCharset());
            if (error != null && !error.isEmpty()) {  // throw exception if error stream
                throw new RuntimeException(error);
            }
            System.out.println(result);   // better to use e.g. Slf4j
            return result;                // return result for optional additional processing
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

Notez que cela utilise le Bibliothèque Apache Commons IO c'est-à-dire ajouter à pom.xml

   <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
       <version>2.10.0</version>
   </dependency>

Pour utiliser le cmd méthode, par exemple

public static void main(String[] args) throws Exception {
    File dir = new File("/Users/bob/code/test-repo");
    cmd(dir, "git status");
    cmd(dir, "git pull");
}

Cela donnera quelque chose comme ceci : -

> git status

On branch main
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

> git pull

Already up to date.

1voto

Dheeraj Sachan Points 21

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

Le texte 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);

Pour votre information, j'utilise un utilitaire pour vérifier le système d'exploitation si c'est Windows. Cela fonctionnera pour d'autres systèmes que Windows. cmd y /c

0voto

Rami Del Toro Points 981

J'avais résolu ce problème en faisant exécuter par l'application Java un sh script qui se trouvait dans le même répertoire, puis dans le sh script avait fait 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X