Heim > Java > javaLernprogramm > Wie kann ich mehrere Befehlszeilenbefehle von einem Java-Programm aus effizient ausführen?

Wie kann ich mehrere Befehlszeilenbefehle von einem Java-Programm aus effizient ausführen?

Susan Sarandon
Freigeben: 2024-11-22 05:59:10
Original
659 Leute haben es durchsucht

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

Befehlszeilenbefehle über Java ausführen

Das Ausführen externer Befehle aus einem Java-Programm kann nützlich sein, um Aufgaben zu automatisieren oder auf Systemfunktionen zuzugreifen. Wie jedoch in der ersten Frage gezeigt, führt die einfache Verwendung von Runtime.getRuntime().exec() möglicherweise nicht zum gewünschten Verhalten, insbesondere bei der Interaktion mit der Windows-Eingabeaufforderung.

Um dieses Problem zu beheben, benötigen Sie eine erweiterte Herangehensweise ist erforderlich. Wie im zitierten Beitrag vorgeschlagen, besteht eine effektive Lösung darin, einen Prozess wiederzuverwenden, um mehrere Befehle auszuführen. Der folgende Code veranschaulicht diese Technik:

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_;
}
Nach dem Login kopieren

Erklärung:

  • Der Code startet einen cmd-Prozess und hält ihn für nachfolgende Befehle am Leben.
  • Zwei Threads werden erstellt, um die Eingabe- und Ausgabeströme des Prozesses zu verarbeiten und so Echtzeit sicherzustellen Interaktion.
  • stdin wird verwendet, um den Befehl „dir c: /A /Q“ an die Eingabeaufforderung zu senden.
  • Der Prozess führt diesen Befehl und alle zusätzlichen über stdin gesendeten Befehle aus.
  • p.waitFor() blockiert, bis der Befehl beendet ist, und stellt so sicher, dass alle Aufgaben abgeschlossen sind, bevor fortgefahren wird.
  • Der Rückkehrcode wird überprüft, um den Erfolg anzuzeigen oder Fehler bei den ausgeführten Befehlen.

Dieser Ansatz ermöglicht eine interaktivere Ausführung von Befehlen an der Windows-Eingabeaufforderung aus einer Java-Anwendung heraus.

Das obige ist der detaillierte Inhalt vonWie kann ich mehrere Befehlszeilenbefehle von einem Java-Programm aus effizient ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage