java运行外部程序_java运行外部程序

如何用java代码运行外部程序?package com.test;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

public class EXERunner {

public void runExe(String exePath) {

try {

Process process = Runtime.getRuntime().exec(exePath);

// 注:process进程的输出流 相对于本进程就是输入流

Thread errorHandler = new Thread(new ErrorIOHandler(process.getErrorStream()));

Thread normalHandler = new Thread(new NormalIOHandler(process.getInputStream()));

Thread cmdHandler = new Thread(new CmdIOHandler(process.getOutputStream()));

errorHandler.start();

normalHandler.start();

cmdHandler.start();

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");

}

}

// 处理外部程序的错误输出流

class ErrorIOHandler implements Runnable {

private InputStream error;

public ErrorIOHandler(InputStream error) {

this.error = error;

}

@Override

public void run() {

BufferedReader br = new BufferedReader(new InputStreamReader(error));

String line = "";

try {

while ((line = br.readLine()) != null) {

System.out.println(line);

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

// 处理外部程序的正常输出流

class NormalIOHandler implements Runnable {

private InputStream normal;

public NormalIOHandler(InputStream normal) {

this.normal = normal;

}

@Override

public void run() {

BufferedReader br = new BufferedReader(new InputStreamReader(normal));

String line = "";

try {

while ((line = br.readLine()) != null) {

System.out.println(line);

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

// 给外部程序发送命令

class CmdIOHandler implements Runnable {

private OutputStream out;

public CmdIOHandler(OutputStream out) {

this.out = out;

}

@Override

public void run() {

try {

String line = "";

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//控制台读取流

while (true) {

line = br.readLine();//从控制台读取一行

if (line.equals("")) {

break;

} else {

out.write((line + "\r\n").getBytes());//发送命令给外部程序

}

out.flush();

}

br.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值