2012-06-28 62 views
0

我想從一個java程序運行一個shell腳本。這個shell腳本調用一個需要一個大文件作爲資源的系統庫。shell進程java同步

我的java程序爲文檔中的每個單詞調用此腳本。如果我使用Runtime.exec()一次又一次地調用此腳本,所花費的時間非常長,因爲資源加載需要很長時間。

爲了克服這一點,我覺得寫的shell腳本如下(以使其在後臺持續運行):


count=0 

while count -lt 10 ; do 

    read WORD 

    //execute command on this line 

done 

我需要在我的java檢索命令的輸出編程並進一步處理。 我應該如何編寫I/O操作來完成這項任務?

我已經嘗試將單詞寫入進程的輸出流,並從進程的輸入流讀回輸出。但是這不起作用,並引發了破損的管道異常。


try { 

    parseResult = Runtime.getRuntime().exec(parseCommand); 

    parsingResultsReader = new BufferedReader(new InputStreamReader (parseResult.getInputStream())); 

    errorReader = new BufferedReader(new InputStreamReader (parseResult.getErrorStream())); 

    parseResultsWriter = new BufferedWriter(new OutputStreamWriter((parseResult.getOutputStream()))); 

} catch (IOException e) { 

      e.printStackTrace(); 

} 

parseResultsWriter.write(word); 

parseResultsWriter.flush(); 

while ((line = parsingResultsReader.readLine()) != null) { 

    // capture output in list here 

} 

請這個問題

+0

「外殼」進程是否需要獨立於虛擬機,還是虛擬機可以自行啓動? – Romain

回答

0
//execute command on this line 

幫助這是命令一個單獨的程序?然後它會爲每個單詞啓動,因此您將只擺脫輕量級的shell進程。 你必須學習如何一次運行許多單詞的重量級命令。