是否可以将 ProcessBuilder 的输出重定向到多个文件?
Is it possible to redirectOutput of ProcessBuilder to more than one file?
我想将 ProcessBuilder
的输出重定向到多个文件。
可以将输出重定向到只有一个文件:
new ProcessBuilder().redirectOutput(Redirect.appendTo(outputFile));
我试过:
new ProcessBuilder().redirectOutput(Redirect.appendTo(outputFile))
.redirectOutput(Redirect.appendTo(outputFile2));
但它只写入第二个文件。
如何将相同的输出写入多个文件?
ProcessBuilder
的redirectOutput(ProcessBuilder.Redirect)
方法设置了一个属性的构建器。如果您再次调用它,它会再次设置 属性,并使用您指定的新值。您不能以这种方式复制输出,部分原因是 ProcessBuilder
不能那样工作,还因为它正在构建的 Process
只有一个输出流可以重定向到开始。
您有多种选择,其中:
- 重定向到单个文件,然后复制文件。
- 将输出重定向回您的 Java 程序(
Redirect.PIPE
,这是默认设置)。然后让您的程序读取进程的输出并将其写入两个目标文件。如果进程相对于 Java 是异步的,那么您需要设置 Java 侧流拆分到 运行 它自己的线程。
如果您的操作环境有可以帮助您的命令,例如 UNIX tee
,那么您可以调整进程 运行s 中的命令,以便它创建了输出本身的一个副本。例如,
new ProcessBuilder().command("bash", "-c", "mycommand --option | tee output1")
.redirectOutput(Redirect.appendTo(outputFile2));
其中,第二个是唯一一个完全由 Java 处理并且独立于操作环境的。但是,如果它适合您的情况,第三种可能是最容易获得的 运行ning。
我想将 ProcessBuilder
的输出重定向到多个文件。
可以将输出重定向到只有一个文件:
new ProcessBuilder().redirectOutput(Redirect.appendTo(outputFile));
我试过:
new ProcessBuilder().redirectOutput(Redirect.appendTo(outputFile))
.redirectOutput(Redirect.appendTo(outputFile2));
但它只写入第二个文件。
如何将相同的输出写入多个文件?
ProcessBuilder
的redirectOutput(ProcessBuilder.Redirect)
方法设置了一个属性的构建器。如果您再次调用它,它会再次设置 属性,并使用您指定的新值。您不能以这种方式复制输出,部分原因是 ProcessBuilder
不能那样工作,还因为它正在构建的 Process
只有一个输出流可以重定向到开始。
您有多种选择,其中:
- 重定向到单个文件,然后复制文件。
- 将输出重定向回您的 Java 程序(
Redirect.PIPE
,这是默认设置)。然后让您的程序读取进程的输出并将其写入两个目标文件。如果进程相对于 Java 是异步的,那么您需要设置 Java 侧流拆分到 运行 它自己的线程。 如果您的操作环境有可以帮助您的命令,例如 UNIX
tee
,那么您可以调整进程 运行s 中的命令,以便它创建了输出本身的一个副本。例如,new ProcessBuilder().command("bash", "-c", "mycommand --option | tee output1") .redirectOutput(Redirect.appendTo(outputFile2));
其中,第二个是唯一一个完全由 Java 处理并且独立于操作环境的。但是,如果它适合您的情况,第三种可能是最容易获得的 运行ning。