Java执行外部程序

在Java中使用Runtime类和Process Builder类两种方式来执行外部程序 

  • Runtime类
  • ProcessBuilder类

1、Runtime调用外部程序

package cn.waggag.test.ExecuteExternalProgram;

import java.io.*;

/**
 * @description: RunTime执行外部程序
 * @author: waggag
 * @time: 2019/9/21
 * @Company http://www.waggag.cn
 */
public class ExeRunner {

    public void runExe(String exePath) {
        try {
            //获取执行进程
            Process process = Runtime.getRuntime().exec(exePath);
            //读取输入流
            InputStream inputStream = process.getInputStream();
            //将字节流转成字符流
            InputStreamReader reader = new InputStreamReader(inputStream, "gbk");
            //字符缓冲区
            char[] chars = new char[1024];
            int len = -1;
            while ((len = reader.read(chars)) != -1) {
                String string = new String(chars, 0, len);
                System.out.println(string);
            }
            inputStream.close();
            reader.close();
            process.waitFor(); // 等待process进程的输出流都被处理
            int exitValue = process.exitValue();
            if (exitValue == 0) {
                System.out.println("进程正常退出");
            } else {
                System.out.println("进程异常退出");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new ExeRunner().runExe("C:\\Windows\\System32\\ipconfig.exe");
    }
}

2、ProcessBuilder调用外部程序

package cn.waggag.test.ExecuteExternalProgram;

import cn.waggag.test.utils.Mp4VideoUtil;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * @description: ProcessBuilder执行外部程序
 * @author: waggag
 * @time: 2019/9/21
 * @Company http://www.waggag.cn
 */
public class TestProcessBuilder {

    @Test
    public void testProcessBuilder() throws IOException {

        //创建ProcessBuilder对象
        ProcessBuilder processBuilder = new ProcessBuilder();
        //设置执行的第三方程序(命令)
        processBuilder.command("ipconfig");
        //processBuilder.command("java","-jar","f:/xc-service-manage-course.jar");

        //将标准输入流和错误输入流合并
        // 通过标准输入流读取信息就可以拿到第三方程序输出的错误信息、正常信息
        processBuilder.redirectErrorStream(true);

        //启动一个进程
        Process process = processBuilder.start();
        //读取输入流
        InputStream inputStream = process.getInputStream();
        //将字节流转成字符流
        InputStreamReader reader = new InputStreamReader(inputStream, "gbk");
        //字符缓冲区
        char[] chars = new char[1024];
        int len = -1;
        while ((len = reader.read(chars)) != -1) {
            String string = new String(chars, 0, len);
            System.out.println(string);
        }
        inputStream.close();
        reader.close();
    }
}

3、具体使用查询相关文档,本文简单的介绍两种调用外部程序的方式。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值