0

Java プログラムからシェル スクリプトを実行したいと考えています。このシェル スクリプトは、リソースとして大きなファイルを必要とするシステム ライブラリを呼び出します。

私の Java プログラムは、ドキュメント内のすべての単語に対してこのスクリプトを呼び出します。Runtime.exec() を使用してこのスクリプトを何度も呼び出すと、リソースのロードに時間がかかるため、非常に時間がかかります。

これを克服するために、シェルスクリプトを次のように書くことを考えました(バックグラウンドで継続的に実行するため):


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

}

この問題について親切に助けてください

4

1 に答える 1

0
//execute command on this line

このコマンドは別のプログラムですか? 次に、すべての単語に対して起動されるため、とにかく軽量なシェルプロセスのみを取り除くことができます. 一度に多くの単語に対して重量コマンドを実行する方法を学ぶ必要があります。

于 2012-06-28T12:34:59.777 に答える