grep
Java では、コマンドを呼び出して、その出力を stdout に送信したいと考えています。私がすることができます:
ProcessBuilder pb = new ProcessBuilder("grep", "regexp", "foo.txt");
pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
pb.redirectError(ProcessBuilder.Redirect.INHERIT);
pb.start().waitFor();
ただし、grep
プロセスの stdout は実際には Java プロセスにパイプされてから出力されます。データが巨大な場合、これは非効率的です。
汚い方法は、Java プロセスの stdout を (たとえば によってreadlink(/proc/self/fd/1)
) 見つけてから を呼び出すpb.redirectOutput(ProcessBuilder.Redirect.appendTo(new File(MYSTDOUTFILE)));
ことですが、より良い方法はありますか?