2015-05-29 84 views
0

我有一种情况,我正在寻找我的Java程序作为BASH脚本运行,轮到它将运行C++程序。以C++程序输出为Java输入

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

我第一次尝试使用下面的代码从终端读入输入,但我不确定如何将它从用户输入转换为自动接受C++输入。

Java代码::

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

我然后使用InputStreamReader与重定向C的输出++程序一起试图

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 

然而结果就是它只是打印的内容到终端。

回答

4

看起来您已经拥有所有的Java和C++代码。缺少的难题似乎是外壳重定向。你应该查阅你正在使用的shell的手册并寻找重定向。如果你正在使用bash shell的重定向应该是这样的:

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

工作感谢!没想到会是这么简单。 – Colin747

+0

是的,但你不能从需求java运行它 –

+0

我只需要它在初始启动时运行。 – Colin747

1

你可以使用调用Runtime.getRuntime()EXEC(“yourCommand”)从Java功能, 它将返回它具有一个Process对象输入,输出和err流,您可以使用这些流发送和接收来自您的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++ 
+1

由于要执行的命令是一个shell脚本,这个stackoverflow也可能有帮助:http://stackoverflow.com/questions/17142573/java-runtime-exec-to-run-shell-script-cannot-open-file – Matthias