Maison >Java >javaDidacticiel >Comment exécuter correctement plusieurs commandes de ligne de commande en Java ?

Comment exécuter correctement plusieurs commandes de ligne de commande en Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-30 21:33:15639parcourir

How to Properly Execute Multiple Command-Line Commands in Java?

Comment exécuter des arguments de ligne de commande via Java

Question :

Comment exécuter arguments de ligne de commande via Java ? Par exemple, considérons le code suivant :

// Execute command
String command = "cmd /c start cmd.exe";
Process child = Runtime.getRuntime().exec(command);

// Get output stream to write from it
OutputStream out = child.getOutputStream();

out.write("cd C:/ /r/n".getBytes());
out.flush();
out.write("dir /r/n".getBytes());
out.close();

Ce code ouvre la ligne de commande mais n'exécute pas les commandes "cd" ou "dir".

Réponse :

Pour réutiliser un seul processus pour plusieurs commandes sous Windows, suivez ces étapes :

  1. Créez un tableau de chaînes avec le nom de la commande, dans ce cas, "cmd".
  2. Exécutez la commande en utilisant Runtime.getRuntime().exec(command).
  3. Démarrez les threads pour gérer les erreurs et les flux de sortie.
  4. Ouvrez un PrintWriter sur la sortie stream.
  5. Écrivez les commandes souhaitées dans le PrintWriter.
  6. Fermez le PrintWriter.
  7. Attendez que le processus se termine avec p.waitFor().

Voici un exemple :

String[] command = {"cmd"};
Process p = Runtime.getRuntime().exec(command);
new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
stdin.println("dir c:\ /A /Q");
stdin.close();
int returnCode = p.waitFor();
System.out.println("Return code = " + returnCode);

SyncPipe Classe :

class SyncPipe implements Runnable {
    public SyncPipe(InputStream istrm, OutputStream ostrm) {
        istrm_ = istrm;
        ostrm_ = ostrm;
    }

    public void run() {
        try {
            final byte[] buffer = new byte[1024];
            for (int length = 0; (length = istrm_.read(buffer)) != -1; ) {
                ostrm_.write(buffer, 0, length);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private final OutputStream ostrm_;
    private final InputStream istrm_;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn