Java プログラムから複数のコマンド ライン コマンドを効率的に実行するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-22 05:59:10
オリジナル
602 人が閲覧しました

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

Java を介したコマンドラインコマンドの実行

Java プログラムからの外部コマンドの実行は、タスクの自動化やシステム機能へのアクセスに役立ちます。ただし、最初の質問で示したように、Runtime.getRuntime().exec() を使用するだけでは、特に Windows コマンド プロンプトを操作する場合に、望ましい動作が得られない可能性があります。

この問題を解決するには、より高度なアプローチが必要です。引用された投稿で示唆されているように、効果的な解決策の 1 つは、プロセスを再利用して複数のコマンドを実行することです。次のコードは、この手法の例です。

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_;
}
ログイン後にコピー

説明:

  • このコードは cmd プロセスを起動し、後続のコマンドのために存続させます。
  • プロセスの入力ストリームと出力ストリームを処理するために 2 つのスレッドが作成され、リアルタイム性が確保されます。インタラクション。
  • 標準入力は、コマンド "dir c: /A /Q" をコマンド プロンプトに送信するために使用されます。
  • プロセスは、このコマンドと、標準入力を介して送信された追加のコマンドを実行します。
  • p.waitFor() はコマンドが終了するまでブロックし、続行する前にすべてのタスクが完了していることを確認します。
  • リターン コードがチェックされます。実行されたコマンドの成功または失敗を示します。

このアプローチにより、Java アプリケーション内から Windows コマンド プロンプトでコマンドをより対話的に実行できます。

以上がJava プログラムから複数のコマンド ライン コマンドを効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート