Redirecting Output from a Process
By default, a process writes standard output and standard error to pipes. In your application, you can access these pipes through the input streams returned by the methods Process.getOutputStream and Process.getErrorStream. However, before starting the process, you can redirect standard output and standard error to other destinations, such as a file, with the methods redirectOutput
and redirectError
.
In the following excerpt, the method redirectToFileTest
redirects standard input to a file, out.tmp
, then prints this file:
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();
}
}
The excerpt redirects standard output to the file out.tmp
. It redirects standard error to the standard error of the invoking process; the value Redirect.INHERIT specifies that the subprocess I/O source or destination is the same as that of the current process. The call to the inheritIO() method is equivalent to redirectInput(Redirect.INHERIT).redirectOuput(Redirect.INHERIT).redirectError(Redirect.INHERIT).