我想将ProcessBuilder
的输出重定向到多个文件。
可以使用以下命令将输出重定向到一个文件:
new ProcessBuilder().redirectOutput(Redirect.appendTo(outputFile));
我试着这样做:
new ProcessBuilder().redirectOutput(Redirect.appendTo(outputFile))
.redirectOutput(Redirect.appendTo(outputFile2));
但它只会写入第二个文件。
如何将同一输出写入多个文件?
答案 0 :(得分:2)
redirectOutput(ProcessBuilder.Redirect)
ProcessBuilder
方法设置构建器的属性。如果再次调用它,则会使用您指定的新值再次设置该属性。你不能以这种方式复制输出,部分原因是因为ProcessBuilder
不能以这种方式工作,而且因为它构建的Process
只有一个输出流可以重定向到开头。
您有几种选择,其中包括:
Redirect.PIPE
,这是默认值)。然后让程序读取进程的输出并将其写入两个目标文件。如果该进程与Java异步,那么您需要设置Java端流分割以运行自己的线程。如果您的操作环境有一个可以帮助您的命令,例如UNIX tee
,那么您可以调整该进程运行的命令,以便创建一个输出本身的副本。例如,
new ProcessBuilder().command("bash", "-c", "mycommand --option | tee output1")
.redirectOutput(Redirect.appendTo(outputFile2));
其中,第二个是完全由Java处理并独立于操作环境的。但是,如果它适合您的情况,第三个可能是最容易运行的。