各种重载
Runtime.getRuntime().exec(...)可以采用字符串数组或单个字符串。exec()在将字符串数组传递到采用字符串数组的
exec()重载之一之前,的单字符串重载将把字符串标记为参数数组。的
ProcessBuilder构造,在另一方面,只需要一可变参数串或阵列
List串,其中假定该阵列或列表中的每个字符串为一个单独的参数。不管哪种方式,然后将获得的参数合并为一个字符串,然后将其传递给
OS以执行。
因此,例如在Windows上,
Runtime.getRuntime().exec("C:DoStuff.exe -arg1 -arg2");将
DoStuff.exe使用两个给定参数运行程序。在这种情况下,命令行将被标记化并放回原处。然而,
ProcessBuilder b = new ProcessBuilder("C:DoStuff.exe -arg1 -arg2");将失败,除非恰好是他的名字是一个程序
DoStuff.exe -arg1 -arg2在C:。这是因为没有标记化:假定运行的命令已经被标记化。相反,你应该使用
ProcessBuilder b = new ProcessBuilder("C:DoStuff.exe", "-arg1", "-arg2");或者
List<String> params = java.util.Arrays.asList("C:DoStuff.exe", "-arg1", "-arg2");ProcessBuilder b = new ProcessBuilder(params);


