Java直接调用exe可执行文件传参并且获取返回值

引言

 

       平日里,我们看到了很多已经成型的可执行文件,而且经过了一定的封装。因为开源的关系,大多时候可以自己使用eclipse进行编译,但也常常遇到不如直接调用更加方便的情况。那么这时候,就需要使用Java来直接调用这些出色的可执行文件。之前在开发有关GIS项目的时候其中有一个项目要平凡的用Java程序去调用exe可执行文件,具体为什么要这样做我也不清楚,一切任务听从领导的安排。

表达能力不好直接上代码~~~

 

一个小Case

其实很简单, 首先编写一个命令command;

Runtime.getRuntime()得到当前运行是环境;

然后调用它的exec(cmd)方法, 该方法返回一个进程process;

查看process的API可以看到, process只有几个方法, 却很有用, 如下:

destroy() 杀掉子进程;

exitValue(): 返回子进程的出口值;

getErrorStream(): 获得子进程的错误流;

       getInputStream(): 获得子进程的输入流;

       getOutputStream(): 获得子进程的输出流;

       waitFor(): 导致当前线程等待,如果必要,一直要等到由该 Process 对象表示的进程已经终止。

package com.hadoop.util;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

/*
 * 运行可执行文件:.exe
 * 当要执行一个本地机器上的可执行文件时,
 * 可以使用java.lang包中的Runtime类,首先使用Runtime类,首先
 * 使用Runtime类声明一个对象
 *{
 *    Runtime sc =Runtime.getRuntime();
 *   sc可以调用exec(String command) 方法打开本地湖区上的可执行文件或执行一个操作。    
 * }
 */
public class transferExe {

    public static void main(String[] args) {
        //需要传入的参数(ps: 多个参数用空格隔开)
        String paras = " --task C:\\Users\\Admin\\.cesiumlab\\tasks\\terrain_99254c80b1ef11ea8edfe728504fc83a.json --taskserver tcp://127.0.0.1:9001 --taskname 99254c80b1ef11ea8edfe728504fc83a --log_dir C:\\Users\\Admin\\.cesiumlab\\logs";

        //调用的exe可执行文件(ps: 调用可执行文件和参数拼接必须要用空格隔开)
        String cmd = "C:\\Program Files\\cesiumlab2\\tools\\terrainbuilder.exe" + paras; 

        openExe(cmd);

    }

    public static void openExe(String cmd) {
        BufferedReader br = null;
        BufferedReader brError = null;

        try {
            //执行exe  cmd可以为字符串(exe存放路径)也可为数组,调用exe时需要传入参数时,可以传数组调用(参数有顺序要求)
            Process p = Runtime.getRuntime().exec(cmd);
            String line = null;
            //获得子进程的输入流。
            br = new BufferedReader(new InputStreamReader(p.getInputStream()));
            //获得子进程的错误流。
            brError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
            while ((line = br.readLine()) != null  || (line = brError.readLine()) != null) {
                //输出exe输出的信息以及错误信息
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

你可能感兴趣的:(Java,java,exe,runtime)