【发布时间】:2021-09-28 21:32:26
【问题描述】:
之后
Runtime.getRuntime().exec(command);
我看到系统调用显示 2~3 个文件描述符(FIFO 管道)。使用 try-with-resource 模式关闭它们的正确方法是什么?
在 java 论坛上发现的大多数历史部落知识表明:
# out of date!
... } finally {
IOUtils.closeQuietly(p.getOutputStream());
IOUtils.closeQuietly(p.getInputStream());
IOUtils.closeQuietly(p.getErrorStream());
}
但这听起来不对,因为 1) 方法 closeQuietly 已弃用,大多数库建议使用 try-with-resource,2) 它不优雅,因为我可能不一定拥有所有流。
简单地将 exec() 调用移到 try 中感觉不对,因为它不是我将调用 close() 的资源。
【问题讨论】:
-
如果您除了打印它们之外没有对这些流做任何事情,您可以使用 ProcessBuilder 而不是 Runtime.exec,并调用 ProcessBuilder 的 inheritIO() 方法。那么根本不需要管理这些流。
标签: java exec try-with-resources