哪一个更好?"更好"的意思是哪一个拥有更好的安全性等方面的优势(而不是易用性)。
这两者之间唯一的真正区别就是易用性。
需要注意的是,易用性可以通过帮助避免误用来提高安全性。
至少在OpenJDK 6上,Runtime.exec()
是使用ProcessBuilder
实现的:
public Process exec(String[] cmdarray, String[] envp, File dir)
throws IOException {
return new ProcessBuilder(cmdarray)
.environment(envp)
.directory(dir)
.start();
}
Runtime.exec
有重载方法能够将command
作为单个字符串进行分词,而在ProcessBuilder
中单个字符串则被处理成可变参数String[1]
-- 参见https://dev59.com/_Gw15IYBdhLWcg3wD3dk - dave_thompson_085