我知道這已經被問到過,但是,有時人們會碰到其他答案似乎沒有幫助。如何在我的Java應用程序中與C控制檯應用程序進行交互
我需要啓動一個C應用程序,並通過它的幾個輸入來瀏覽其菜單,以最終執行我所需要的。最終的輸出(結果)被髮送到一個文件,但是中間輸出(控制檯上打印的菜單和子菜單)很適合打印在我的Eclipse控制檯上進行調試。
我根據用戶Vince posted on his question和後面提到的工作編寫了下面的代碼,但它似乎沒有爲我做。
public final class InteractWithExternalApp {
private static PrintWriter printOut;
private static BufferedReader retrieveOutput;
private static Process p;
private EvaluationTests(){} // suppressing the class constructor
public static void Evaluate(String paramToApp) {
try
{
Runtime rt = Runtime.getRuntime() ;
p = rt.exec("C:\\Path\\To\\Desktop\\appName " + paramToApp);
InputStream in = p.getInputStream() ;
OutputStream out = p.getOutputStream();
retrieveOutput = new BufferedReader(new InputStreamReader(in));
printOut = new PrintWriter(out);
// print menu
if((line = retrieveOutput.readLine()) != null) {
System.out.println(line);
}
// send the input choice -> 0
printOut.println("0");
printOut.flush();
// print sub-menu
if((line = retrieveOutput.readLine()) != null) {
System.out.println(line);
}
// send the input choice
printOut.println("A string");
printOut.flush();
// print sub-menu
if((line = retrieveOutput.readLine()) != null) {
System.out.println(line);
}
/*
Repeat this a few more times for all sub-menu options until
the app finally executes what's needed
*/
}catch(Exception exc){
System.out.println("Err " + exc.getMessage());
}
return;
}
而且,作爲一個練習,我試圖打開Windows命令提示符併發送一個命令,下面給出here的例子。 cmd.exe打開罰款,但然後通過一個echo
命令沒有做任何事情。
OutputStream stdin = p.getOutputStream();
InputStream stdout = p.getInputStream();
stdin.write(new String("echo test").getBytes());
stdin.flush();
有人能請一下嗎?我哪裏錯了?
。請使用ProcessBuilder。它更好地處理白色空間。 – Jayan 2014-11-01 05:28:57
@Jayan,你的意思是在'ProcessBuilder pb = new ProcessBuilder(「C:\\ Path \\ To \\ Desktop \\ appName」,「paramToApp」);''和'pb.start()'? 既然你沒有正式回答這個問題,我應該猜測這是唯一的問題,其餘的將會很好地工作或者只是一個改進? – 2014-11-01 06:38:21
是的。那將是一個開始。 – Jayan 2014-11-01 07:39:40