在 Unix 上,您可以使用以下命令丢弃进程的输出:
pb.redirectOutput(new File("/dev/null"));
在 Windows 上,您需要使用NUL
. 是否有比以下代码段更好的选择来支持任意平台?
File devNull = new File("/dev/null");
if (devNull.exists()) {
pb.redirectOutput(devNull);
} else {
pb.redirectOutput(new File("NUL"));
}
这看起来很笨拙,但是ProcessBuilder.Redirect.NULL
在 API 中没有可以使用的字段或看似任何其他方式来执行此操作。
我也有点担心这不能处理非 Unix-non-Windows 的情况(但我不确定这种情况是否存在)。
我知道Java 和类似问题的平台无关 /dev/null 输出接收器,但是使用无操作OutputStream
仍然需要启动一个线程来主动丢弃输出 - 我更愿意让操作系统为我做.