2

私が取り組んでいるプロジェクトでは、リソース フォルダー (クラス パス) にあるスクリプトを実行する必要があります。Windows を使用しているため、ファイルを STDIN に出力する方法が必要だったため、単純な cat.jar プログラムを作成して UNIX の cat コマンドを複製しました。

したがって、「java -jar cat.jar someFile.txt」を実行すると、ファイルが標準出力に出力されます。私がやったことを行うにはさまざまな方法があると確信しています。

とにかく、メインの Java プログラムからその JAR を実行したいと考えています。私がやっている

Runtime.getRuntime().exec("java -jar C:/cat.jar C:/test.txt");

スラッシュをバックスラッシュに切り替えてエスケープしようとしましたが、うまくいきませんでした。標準出力には何も送信されません。

一方、cat jar を単独で実行すると、ファイルが標準出力に送られます。

ここで何が間違っていますか?これで十分な情報ですか?

4

1 に答える 1

2

Processによって返されたインスタンスを使用しますexec()

Process cat = Runtime.getRuntime().exec("java -jar C:/cat.jar C:/test.txt");
BufferedInputStream catOutput= new BufferedInputStream(cat.getInputStream());
int read = 0;
byte[] output = new byte[1024];
while ((read = catOutput.read(output)) != -1) {
    System.out.println(output[read]);
}


参照:
http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html

デフォルトでは、作成されたサブプロセスには独自の端末またはコンソールがありません。すべての標準 I/O (stdin、stdout、stderr) 操作は親プロセスにリダイレクトされ、メソッド getOutputStream()、getInputStream()、および getErrorStream() を使用して取得したストリームを介してアクセスできます。

http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#getInputStream()

getInputStream() は、サブプロセスの通常の出力に接続された入力ストリームを返します。

于 2013-04-30T15:18:51.573 に答える