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