当前位置: 首页 > 知识库问答 >
问题:

从Java中执行EXE并从EXE中获取输入和输出

巫马俊力
2023-03-14

我有一个EXE文件,< code>addOne.exe,它不断地从控制台上的用户获得一个整数输入(不是命令行参数),并将整数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程序。

非常感谢。

共有1个答案

丁雅逸
2023-03-14

当使用ProcessBuilderProcessBuilder#start()启动外部程序时,将为程序创建 object,如下所示:

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

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

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

要将数据写入外部程序,您可以使用处理器输出Sream实例化BufferedWriter

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

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

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

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

  1. 使用Scanner#nextInt()从控制台读取用户输入
  2. 使用writer
  3. 将用户输入写入外部程序
  4. 使用读取器
  5. 读取外部程序输出的数据
  6. 最后,使用System.out.println()将数据打印到控制台
 类似资料:
  • 问题内容: 我正在尝试运行可执行文件并使用;捕获其输出;但是,我似乎并没有获得全部输出。 手动打开时,它比原始exe文件少打印两行。 我尝试了一种具有相同结果的替代方法: 任何人都可以帮助我获取exe的完整数据吗? 正如塞巴斯蒂安的要求: 原始exe文件最后几行o / p: -Gdd:通用计数(1-1000) -Cdd:切割起始于(0-99)-Edd:切割终止于(1-100) 请在下面选择流文件编

  • 问题内容: 如果我有此代码,该如何保留原始文件的文件名或将其重新分配给新文件名?: 问题答案: 可以创建输入流以从文件或任何其他数据源读取。因此,将文件名附加到输入流没有任何意义。查看该类是否公开了该数据(您甚至可以使用反射来查看该类的内部)。请注意,创建者或犯了一个设计错误,没有公开此信息,或者您正在尝试制作此信息。

  • 我是Java的新手,我正在尝试从一个多行的输入中获取一个字符串。 例如,一个字符串=“the quick brown fox jumps over the lazy dog.the quick brown fox jumps over the lazy dog.the quick fox jumps over the lazy dog.”输入如下: 敏捷的棕色狐狸跳过懒惰的狗。 敏捷的棕色狐狸跳过

  • 下面是练习: 如果输入的是有效的等级号,程序应该打印“确定”。否则,程序应该打印输入的值和“不是有效的等级”。并再次提示等级号。程序应该继续询问等级号,直到用户输入有效的等级号。 示例输出: 输入年级(0-5): 9 9 不是有效成绩 输入成绩 (0-5): 两 个两个不是有效成绩 输入等级 (0-5): 2 OK 我在time循环中使用NumberFormatException的“try and

  • 问题内容: 我对如何从ssh等终端子进程发送输入和接收输出有疑问。 我在Golang中找不到一个简单的示例,其工作原理与上述类似。 在Golang中,我想做这样的事情,但是似乎不起作用: 然而; 我不确定如何执行此操作,因为每次执行此ssh命令时,我只能获取输出。我无法通过代码自动输入密码。有没有人写过ssh等终端进程的示例?如果是这样,请分享。 问题答案: 由于上面的评论,我可以使用密码使用ss

  • 问题内容: 我正在使用运行时从Java程序运行命令提示符命令。但是,我不知道如何获得命令返回的输出。 这是我的代码: 我尝试做,;但是没有返回任何东西。该命令的执行应返回两个数字,以分号分隔。我怎样才能在变量中打印出来? 这是我现在使用的代码: 但是我没有得到任何输出,但是当我自己运行该命令时,它可以正常工作。 问题答案: 这是要走的路: