首页 > Java > java教程 > 正文

Runtime.exec() 与 ProcessBuilder.start():什么时候应该使用它们?

Susan Sarandon
发布: 2024-11-13 15:22:02
原创
756 人浏览过

Runtime.exec() vs. ProcessBuilder.start(): When Should I Use Each?

ProcessBuilder 与 Runtime.exec():了解差异

当尝试从 Java 执行外部命令时,开发人员经常会遇到差异Runtime.exec() 和 ProcessBuilder.start() 之间的行为。

Runtime.exec():

使用 Runtime.getRuntime().exec() 涉及一个两步过程:标记化和执行。输入字符串在执行之前会被解析并转换为参数数组。

ProcessBuilder:

相比之下,ProcessBuilder 的操作方式有所不同。它的构造函数接受一个可变参数数组或字符串列表,其中每个字符串代表一个单独的参数。然后将参数组合成单个字符串并传递给操作系统。

对执行的影响:

参数处理中的这种差异可能会影响命令。例如,如果命令包含空格,Runtime.exec() 将自动处理标记化,而 ProcessBuilder 需要显式创建参数数组或列表。

示例:

考虑以下带有空格的命令:

"C:\DoStuff.exe -arg1 -arg2"
登录后复制

使用 Runtime.exec():

Process p = Runtime.getRuntime().exec("C:\DoStuff.exe -arg1 -arg2");
登录后复制

在这种情况下,命令将按预期执行,exitValue 将为 0。

使用 ProcessBuilder:

Process p = (new ProcessBuilder("C:\DoStuff.exe -arg1 -arg2")).start();
登录后复制

但是,直接使用 ProcessBuilder 而不进行标记化将导致错误或意外行为,返回exitValue 为 1001。要纠正此问题,您必须显式创建参数数组:

Process p = (new ProcessBuilder("C:\DoStuff.exe", "-arg1", "-arg2")).start();
登录后复制

摘要:

一般来说,在使用 ProcessBuilder 时,必须提供将参数作为单独的列表或数组,明确指示每个单独的参数。此附加步骤可确保正确解析参数并按预期执行外部命令。

以上是Runtime.exec() 与 ProcessBuilder.start():什么时候应该使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板