一天一点学Java

Java子进程—(二)子进程执行终端命令

2018-04-18  本文已影响0人  Sandy_678f
/**
 * Copyright (C) 2017-2018 All Rights Reserved.
 */
package processdemo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;


public class RuntimeDemo {

    public static void main(String[] args) throws IOException, InterruptedException {

        /**
         * Process + Runtime
         * Runtime的exec执行函数也是调用的ProcessBuilder的构造函数来创建子进程并执行
         */
        Runtime runtime = Runtime.getRuntime();

        //新启一个子进程
        Process process = runtime.exec("pwd");

        //子进程向主进程输出信息
        InputStream inputStream = process.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String temp = null;
        while( (temp = bufferedReader.readLine()) != null){
            System.out.println(temp);
        }

        /**
         * Process + ProecssBuilder
         */
        List<String> cmdList = Arrays.asList("ls","-a");
        ProcessBuilder processBuilder = new ProcessBuilder(cmdList);
        process = processBuilder.start();

        //waitFor()函数是让当前主进程等待该子进程执行完毕,正常退出则返回0
        if(process.waitFor() != 0 )
            System.exit(1);

        //子进程向主进程输出信息
        inputStream = process.getInputStream();
        bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        while( (temp = bufferedReader.readLine()) != null){
            System.out.println(temp);
        }
    }

}

Runtime是程序运行时环境,不能new一个Runtime对象,只能通过getRuntime()方式获取Runtim运行时对象的引用。
Runtime+Process 和 ProcessBuilder+Process的区别就是运行子进程的命令不相同。

上一篇 下一篇

猜你喜欢

热点阅读