java 外部程序_Java执行外部程序

本文详细介绍了在Java中如何使用Runtime类和ProcessBuilder类来执行外部程序。通过示例代码展示了如何运行`ipconfig.exe`,并读取其输出。两种方法都实现了进程的启动和输出流的处理,对于理解和操作Java进程控制非常有帮助。
摘要由CSDN通过智能技术生成

在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、具体使用查询相关文档,本文简单的介绍两种调用外部程序的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值