java - 从 Java 运行可执行文件

标签 java process cmd system-calls

我有一个外部可执行程序,我想在我的 java 程序中运行它。当它运行时,我需要一种方法来获取 .exe 输出的内容,以及一种将输入发送回 .exe 的方法。这是我到目前为止所想到的:

public int run(){
    String cmdRun = "cmd C:\\Meister\\Student\\bin\\Student.exe";

    int returnCode = 1;
    try {
        Process p = Runtime.getRuntime().exec(cmdRun); // makes appropriate system call
        BufferedReader stdError = new BufferedReader(new
                                  InputStreamReader(p.getErrorStream()));
        BufferedReader stdInput = new BufferedReader(new
                                  InputStreamReader(p.getInputStream()));
        String s = null;

        // read any info from the attempted command
        while ((s = stdError.readLine()) != null){ returnCode = -1; break; }
        while ((s = stdInput.readLine()) != null){ System.out.println(s); }
        System.out.println("Finished with exit code " + p.waitFor());
    } catch (Exception e) {
        e.printStackTrace();
    }

    return returnCode;
}

我应该如何正确地运行(1)程序,获取(2)程序输出,然后在必要时发送(3)输入到程序?

编辑:顺便说一句,当我运行上面看到的方法时,即使正在执行文件,我也看不到任何输出。

最佳答案

尝试创建一个文件来保存您希望 .exe 接收的输入,并创建另一个文件来保存 .exe 的输出,以便 java 程序可以读取它。

如果这没有帮助,这里有一些链接,希望可以:

关于流程构建器的所有信息: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html

我在搜索一段时间时也发现了这个:

java runtime.getruntime() getting output from executing a command line program

关于java - 从 Java 运行可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23163545/

相关文章:

java - 如何让加载 Activity 等待线程完成

java - 使用JAVA的音频文件持续时间

java - ProcessBuilder未读取执行文件

node.js - 如何在不删除杀毒软件或重新安装 Node 的情况下释放资源\AppData\Local\Temp\shelljs_60d55c70cdc922162f4b?

c++ - 在 C++ 应用程序中启动进程并处理它

c# - 通过 .NET 运行 cmd 命令?

selenium - 无法更新 chromedriver 和 seleniumrelease

matlab - 命令行不会等到 exe 执行完成

java - Lambda 和转换交集类型(Eclipse 编译器错误)

java - 如何在 spring 项目中为实体类和 DTO 自动生成 Junit 测试用例