[英]How do I read and write from an external process in Java?
我想從Java GUI運行PianoBar(PianoBar是一個從命令行運行Pandora的程序)。 我認為這會很快而且很臟,但我想我對程序之間的互動知之甚少。
我使用ProcessBuilder來啟動PianoBar的實例,如下所示:
private Process createPianoBarProcess() throws IOException {
String[] command = {"CMD", "/C", "pianobar"};
ProcessBuilder probuilder = new ProcessBuilder( command );
probuilder.redirectErrorStream(true);
probuilder.directory(new File("~~location where pianobar.exe is~~"));
Process process = probuilder.start();
return process;
}
在創建進程后,我創建了一個BufferedReader來讀取PianoBar輸出:
Process pianoBar = createPianoBarProcess();
InputStream inS = pianoBar.getInputStream();
InputStreamReader isr = new InputStreamReader(inS);
BufferedReader br = new BufferedReader(isr);
但是當我通過這個閱讀器閱讀PianoBar的輸出時,它會吐出PianoBar的第一行(“歡迎來到pianobar(2013.05.19-win32)!”按?獲取命令列表。“),然后它吐出下一個line(“[?] Email:”)。 然后它就掛了。
顯然,它正在等待用戶輸入他們的電子郵件。 但無論我嘗試什么,我都無法讓我的Java程序在提示時將電子郵件寫入PianoBar進程 - 只要它讀出最后一個字符就會掛起。
有可能做我想做的事嗎? 我認為在互聯網上尋找是件容易的事,但我找不到任何東西。 我想要的只是在提示時寫入外部進程的簡單方法。 看起來這應該很容易......
您可以使用以下代碼段來實現:
String s;
//s = email
BufferedWriter bufferedwriter = new BufferedWriter(new OutputStreamWriter(pianoBar.getOutputStream()));
bufferedwriter.write(s);
bufferedwriter.flush();
完成! 請記住使用適當的try / catch包圍代碼塊
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.