了解Java中ProcessBuilder的示例代码

时间:2019-05-04 15:41:27

标签: java processbuilder

我有一些示例代码,其中使用了流程构建器并给出了两个命令来执行,但是我无法完全理解每一行代码在做什么。

此外,这些命令似乎并未实际执行。

代码:

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,但我并不真正理解

1 个答案:

答案 0 :(得分:1)

ProcessBuilder帮助启动外部进程。

首先,将命令行部分(可执行文件,参数)作为String的列表,这非常方便。 (“ command”在这里颇具误导性,因为它由可执行文件和参数组成)。

第二,您可以编辑新流程的环境(例如“ $HOME”,“ $PATH”等环境变量)。

您的p可用于例如检查进程是否已完成或检索新进程的输入/输出。由于您仅启动该过程(即发即弃),因此在这里不需要它。

您也可以使用Runtime.exec(...)启动外部过程,这是历史做法,但是我认为使用ProcessBuilder更舒适。