【问题标题】:Executing an EXE from Java and getting input and output from EXE从 Java 执行 EXE 并从 EXE 获取输入和输出
【发布时间】:2016-06-28 05:42:46
【问题描述】:

我有一个 EXE 文件,addOne.exe,它不断从控制台上的用户那里获取整数输入(不是命令行参数) 并将 integer + 1 输出到控制台。示例输出如下所示:

1
2

6
7

29
30
...

我正在尝试编写一个 java 程序,它可以:

  • 运行 EXE
  • 使用Scanner.nextInt()不断从Java程序获取用户输入并作为控制台输入输入到EXE
  • 每当 EXE 向控制台输出文本时,从 Java 程序打印该文本

我可以使用以下方式运行 EXE:

new ProcessBuilder("D:\\pathtofile\\addOne.exe").start();

但我不知道如何将 Java 程序的输入发送到 EXE 并将 EXE 的输出发送到 Java 程序。

谢谢。

【问题讨论】:

标签: java


【解决方案1】:

当您使用ProcessBuilderProcessBuilder#start() 启动外部程序时,将为该程序创建一个Process 对象,如下所示:

Process process = new ProcessBuilder("D:\\pathtofile\\addOne.exe").start();

您可以使用process 对象访问输入流和输出流:

InputStream processInputStream = process.geInputStream();
OutputSteam processOutputStream = process.getOutputStream();

要将数据写入外部程序,您可以使用processOutputSream 实例化BufferedWriter

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(processOutputStream));

要从外部程序读取数据,您可以使用processInputStream 实例化BufferedReader

BufferedReader reader = new BufferedReader(new InputStreamReader(processInputStream));

现在您拥有实现目标的所有组件:

  1. 使用Scanner#nextInt() 从控制台读取用户输入。
  2. 使用writer将用户输入写入外部程序
  3. reader读取外部程序输出的数据
  4. 最后用System.out.println()将数据打印到控制台

【讨论】:

  • 能否详细说明2和3?如何使用writer 将用户输入写入外部程序?假设我有一个简单的 python 程序,它有 3 行。 print("Waiting for user input"); result = input(); print(result)(无效)。如何使用write 服务input()
  • 我的问题解决了:stackoverflow.com/q/62234919/10315163
猜你喜欢
  • 2013-08-26
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多