将 C++ 程序输出作为 Java 输入
Take C++ program output as Java input
我有一种情况,我正在将我的 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") 函数,
它将 return 一个具有输入、输出和错误流的 Process 对象,您可以使用这些流向您的 Porcess 发送数据和从您的 Porcess 接收数据。
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++
我有一种情况,我正在将我的 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") 函数, 它将 return 一个具有输入、输出和错误流的 Process 对象,您可以使用这些流向您的 Porcess 发送数据和从您的 Porcess 接收数据。
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++