在 Java 中可以使用 RunTime
类和 ProcessBuilder
类两种方式来执行外部程序,下面以调用 ping
程序做两个示例。
import org.junit.Test;
import java.io.InputStream;
import java.io.InputStreamReader;
public class TestRunProcess {
/**
* ProcessBuilder 方式
*/
@Test
public void testProcessBuilder()throws Exception {
// 创建 ProcessBuilder 对象
ProcessBuilder processBuilder = new ProcessBuilder();
// 设置第三方应用程序的命令
processBuilder.command("ping","192.168.202.143");
// 将标准输入流和错误流合并,类似 bash 中的 &> 操作
processBuilder.redirectErrorStream(true);
// 启动一个进程
Process process = processBuilder.start();
// 通过标准输入流拿到输出信息
InputStream inputStream = process.getInputStream();
printInputStreamAsString(inputStream);
}
/**
* Runtime 方式
*/
@Test
public void testRuntime() throws Exception{
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("ping 192.168.202.143");
printInputStreamAsString(process.getInputStream());
}
/**
* 将输入流转字符串并输出
*/
private void printInputStreamAsString(InputStream inputStream) throws Exception {
// 转成字符流
InputStreamReader reader = new InputStreamReader(inputStream, "gbk");
// 字符缓冲
char[] chars = new char[1024];
int len = -1;
while((len = reader.read(chars))!=-1){
String str = new String(chars, 0, len);
System.out.println(str);
}
inputStream.close();
reader.close();
}
}
评论区