将c++程序输出作为Java输入

Take C++ program output as Java input

本文关键字:Java 输入 输出 c++ 程序      更新时间:2023-10-16

我有一种情况,我正在寻找我的Java程序作为BASH脚本运行,这将运行一个c++程序。

我希望将c++程序的输出(打印到终端的纯文本字符串)作为Java程序的输入。

我的第一次尝试是使用以下代码从终端读取输入,但我不确定如何将它从用户输入转换为自动获取c++输入。

Console c;
c = System.console();
if (c == null) {
  System.out.println("No console.");
  System.exit(1);
}
String data = c.readLine();

然后我尝试使用InputStreamReader以及重定向c++程序的输出:

Java代码:

BufferedReader input = null;
try {
  input = new BufferedReader(new InputStreamReader(System.in));
  String htmlLine = null;
  while ((htmlLine = input.readLine()) != null) {
    System.out.println(htmlLine);
  }
}

命令重定向输出:

java -jar program.jar arg1 arg2 arg3 < ./runActivities.sh

然而,这样做的结果是它只是将runActivities.sh的内容打印到终端。

看起来您已经准备好了所有的Java和c++代码。缺少的拼图部分似乎是shell重定向。您应该查阅正在使用的shell的手册并查找重定向。如果您使用的是bash shell,重定向应该是这样的:

$ ./runActivities.sh | java -jar program.jar arg1 arg2 arg3

您可以使用java中的Runtime.getRuntime().exec("yourCommand")函数,它将返回一个具有输入、输出和错误流的Process对象,你可以使用这些流向进程发送和接收数据。

    Process p = Runtime.getRuntime().exec("yourCommand");
    InputStream is = p.getInputStream();
    // you con now read from inputStream, it is the output of your programm in C++