Maison >Java >javaDidacticiel >Comment puis-je exécuter efficacement plusieurs commandes de ligne de commande à partir d'un programme Java ?

Comment puis-je exécuter efficacement plusieurs commandes de ligne de commande à partir d'un programme Java ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-22 05:59:10675parcourir

How Can I Efficiently Execute Multiple Command Line Commands from a Java Program?

Exécuter des commandes de ligne de commande via Java

L'exécution de commandes externes à partir d'un programme Java peut être utile pour automatiser des tâches ou accéder aux fonctionnalités du système. Cependant, comme démontré dans la question initiale, la simple utilisation de Runtime.getRuntime().exec() peut ne pas produire le comportement souhaité, en particulier lors de l'interaction avec l'invite de commande Windows.

Pour résoudre ce problème, une solution plus avancée une approche est nécessaire. Comme suggéré dans l'article cité, une solution efficace consiste à réutiliser un processus pour exécuter plusieurs commandes. Le code suivant illustre cette technique :

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");
// Add additional commands here
stdin.close();
int returnCode = p.waitFor();
System.out.println("Return code = " + returnCode);

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

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

    private final OutputStream ostrm_;
    private final InputStream istrm_;
}

Explication :

  • Le code lance un processus cmd, le gardant actif pour les commandes suivantes.
  • Deux threads sont créés pour gérer les flux d'entrée et de sortie du processus, garantissant ainsi un temps réel interaction.
  • stdin est utilisé pour envoyer la commande "dir c: /A /Q" à l'invite de commande.
  • Le processus exécute cette commande et toutes les commandes supplémentaires envoyées via stdin.
  • p.waitFor() se bloque jusqu'à la fin de la commande, garantissant l'achèvement de toutes les tâches avant de continuer.
  • Le code retour est vérifié pour indiquer le succès ou l'échec des commandes exécutées.

Cette approche permet une exécution plus interactive des commandes sur l'invite de commande Windows à partir d'une application Java.

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