プロセスからの出力のリダイレクト

デフォルトでは、プロセスは標準出力と標準エラーをパイプに書き込みます。アプリケーションでは、Process.getOutputStreamメソッドおよびProcess.getErrorStreamメソッドから返される入力ストリームを使用して、これらのパイプにアクセスできます。ただし、プロセスの起動前に、redirectOutputメソッドとredirectErrorメソッドを使用して、標準出力と標準エラーをファイルなどの他の出力先にリダイレクトすることができます。

次の引用では、redirectToFileTestメソッドによって標準入力がファイルout.tmpにリダイレクトされ、次にこのファイルが出力されます。

  public static void redirectToFileTest() throws IOException, InterruptedException {
    File outFile = new File("out.tmp");
    Process p = new ProcessBuilder("ls", "-la")
      .redirectOutput(outFile)
      .redirectError(Redirect.INHERIT)
      .start();
    int status = p.waitFor();
    if (status == 0) {
      p = new ProcessBuilder("cat" , outFile.toString())
        .inheritIO()
        .start();
      p.waitFor();
    }
  }

引用では、標準出力はファイルout.tmpにリダイレクトされます。標準エラーは起動したプロセスの標準エラーにリダイレクトされます。値Redirect.INHERITによって、サブプロセスI/Oのソースまたは出力先は現在のプロセスと同じに指定されます。inheritIO()メソッドへのコールはredirectInput(Redirect.INHERIT).redirectOuput(Redirect.INHERIT).redirectError(Redirect.INHERIT)と同等です。