簡體   English   中英

如何從Java中的外部進程讀取和寫入?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM