Process クラスを使用して Java 9 で外部プロセスの実行を制御する方法
概要:
Java では、Process クラスを使用することで、外部プロセスと簡単に対話できます。 Java 9 では、外部プロセスを処理する際のより安全で柔軟なアプローチなど、いくつかの新機能が導入されています。この記事では、Java 9 で Process クラスを使用する方法を説明し、コード例を使用してその使用法を示します。
import java.io.IOException; public class ExternalProcessExample { public static void main(String[] args) { ProcessBuilder processBuilder = new ProcessBuilder("notepad.exe"); try { Process process = processBuilder.start(); } catch (IOException e) { e.printStackTrace(); } } }
上の例では、ProcessBuilder オブジェクトを作成し、起動する外部プロセスのコマンドを「notepad.exe」として指定しました。次に、start() メソッドを使用して外部プロセスを開始します。
2.1 プロセスの終了ステータスを聞く
waitFor() メソッドを使用して、外部プロセスの終了を待機し、その終了ステータスを取得できます。サンプル コードは次のとおりです。
try { int exitValue = process.waitFor(); System.out.println("Process exited with value: " + exitValue); } catch (InterruptedException e) { e.printStackTrace(); }
上の例では、waitFor() メソッドを使用して外部プロセスの終了を待機し、終了ステータスを exitValue 変数に保存します。
2.2 外部プロセスの入出力ストリームを取得する
外部プロセスと対話するために、外部プロセスの入出力ストリームを取得する必要がある場合があります。 Process クラスは、対応するストリームを取得するための getInputStream()、getOutputStream()、および getErrorStream() メソッドを提供します。
try { // 获取进程输入流并发送数据 OutputStream outputStream = process.getOutputStream(); outputStream.write("Hello".getBytes()); // 获取进程输出流并读取数据 InputStream inputStream = process.getInputStream(); byte[] buffer = new byte[1024]; int length = inputStream.read(buffer); String output = new String(buffer, 0, length); System.out.println("Process output: " + output); // 获取进程错误流并读取错误信息 InputStream errorStream = process.getErrorStream(); byte[] errorBuffer = new byte[1024]; int errorLength = errorStream.read(errorBuffer); String errorMessage = new String(errorBuffer, 0, errorLength); System.out.println("Process error: " + errorMessage); } catch (IOException e) { e.printStackTrace(); }
上の例では、getInputStream() メソッドを使用してプロセスの入力ストリームを取得し、getOutputStream() メソッドを使用してプロセスの出力ストリームを取得し、getErrorStream() メソッドを使用してプロセスの入力ストリームを取得します。プロセスのエラー ストリーム。これらのストリームを使用して、プロセスにデータを送信し、プロセスの出力を読み取り、プロセスのエラー情報を読み取ることができます。
process.destroy();
さらに、 destroyForcibly() メソッドを使用して、プロセスが応答しない場合でもプロセスを強制的に破棄することもできます。サンプル コードは次のとおりです。
process.destroyForcibly();
場合によっては、何らかの理由で、外部プロセスの終了を待つ操作を中断する必要があります。操作を中断するには、interrupt() メソッドを使用できます。サンプル コードは次のとおりです。
Thread currentThread = Thread.currentThread(); currentThread.interrupt();
ProcessBuilder processBuilder = new ProcessBuilder() .command("ping", "www.google.com") .redirectError(ProcessBuilder.Redirect.INHERIT);
上の例では、command(String...) メソッドを使用して、外部プロセス コマンドを「ping www.google.com」として指定します。また、 redirectError(ProcessBuilder.Redirect) メソッドを使用して、エラー出力ストリームを標準出力ストリームにリダイレクトします。
概要:
Java 9 では、Process クラスを使用して外部プロセスの実行を制御することが、より安全かつ柔軟になりました。 ProcessBuilder クラスを使用して外部プロセスを作成および開始し、Process クラスを使用してプロセスのステータスを監視し、入出力ストリームを取得し、プロセスと対話することができます。さらに、Java 9 では、外部プロセスの実行を設定および制限するための新しいメソッドもいくつか提供されています。
参考資料:
以上がJava 9 の Process クラスを使用して外部プロセスの実行を制御する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。