Java示例:如何执行进程并读取其输出(很好)

本文介绍了一个Java程序如何执行外部命令,读取命令执行的输出,并根据进程的返回状态来判断执行是否成功。

转自:http://www.blogjava.net/yidinghe/archive/2012/10/26/390296.html


下面是一个例子,演示如何执行一个进程(类似于在命令行下键入命令),读取进程执行的输出,并根据进程的返回值判断是否执行成功。一般来说,进程返回 0 表示执行成功,其他值表示失败。

import java.io.*;

/**
 * 示例:执行进程并返回结果
 
*/
public class ProcessExecutor {

    
public static final int SUCCESS = 0;            // 表示程序执行成功

    
public static final String COMMAND = "java.exe -version";    // 要执行的语句

    
public static final String SUCCESS_MESSAGE = "程序执行成功!";

    
public static final String ERROR_MESSAGE = "程序执行出错:";

    
public static void main(String[] args) throws Exception {

        
// 执行程序
        Process process = Runtime.getRuntime().exec(COMMAND);

        
// 打印程序输出
        readProcessOutput(process);

        
// 等待程序执行结束并输出状态
        int exitCode = process.waitFor();

        
if (exitCode == SUCCESS) {
            System.out.println(SUCCESS_MESSAGE);
        } 
else {
            System.err.println(ERROR_MESSAGE 
+ exitCode);
        }
    }

    
/**
     * 打印进程输出
     *
     * 
@param process 进程
     
*/
    
private static void readProcessOutput(final Process process) {
        
// 将进程的正常输出在 System.out 中打印,进程的错误输出在 System.err 中打印
        read(process.getInputStream(), System.out);
        read(process.getErrorStream(), System.err);
    }

    
// 读取输入流
    private static void read(InputStream inputStream, PrintStream out) {
        
try {
            BufferedReader reader 
= new BufferedReader(new InputStreamReader(inputStream));

            String line;
            
while ((line = reader.readLine()) != null) {
                out.println(line);
            }

        } 
catch (IOException e) {
            e.printStackTrace();
        } 
finally {

            
try {
                inputStream.close();
            } 
catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值