我有一些示例代码,其中使用了流程构建器并给出了两个命令来执行,但是我无法完全理解每一行代码在做什么。
此外,这些命令似乎并未实际执行。
代码:
public static void main(String[] args) {
ArrayList<String> commands = new ArrayList(); // commands in a processbuilder is an Arraylist of of strings
commands.add("myfile.pdf"); // supposed to open the file?
commands.add("bash\", \"-c\", \"ls"); // supposed to use ls command in terminal
execute(commands); // should execute the two commands above
System.out.println("executed commands"); // only thing that actually happens
}
public static void execute(ArrayList<String> command) {
try {
ProcessBuilder builder = new ProcessBuilder(command); // a new builder which takes a command passed into the method
Map<String, String> environ = builder.environment(); // ???
Process p = builder.start(); // p is never used?
} catch (Exception e) {
e.printStackTrace();
}
}
我没有收到任何错误或警告。
试图在processbuilder上阅读API,但我并不真正理解
答案 0 :(得分:1)
ProcessBuilder
帮助启动外部进程。
首先,将命令行部分(可执行文件,参数)作为String
的列表,这非常方便。 (“ command
”在这里颇具误导性,因为它由可执行文件和参数组成)。
第二,您可以编辑新流程的环境(例如“ $HOME
”,“ $PATH
”等环境变量)。
您的p
可用于例如检查进程是否已完成或检索新进程的输入/输出。由于您仅启动该过程(即发即弃),因此在这里不需要它。
您也可以使用Runtime.exec(...)
启动外部过程,这是历史做法,但是我认为使用ProcessBuilder
更舒适。