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
Libérer: 2024-11-22 05:59:10
original
659 Les gens l'ont consulté

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_;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal