次の出力を出力するサンプルEXEがあります。入力ストリームリーダーを使用して読み取るときに行が見つからない
EXEファイル出力:Javaで
1
2
3
4
5
Failed
同等のコード:
for (int i = 1; i <= 5; i++){
System.out.println(i);
}
System.out.println("Failed");
Javaコードを使用してEXEを開始し、一部のデータが欠落する出力を読み取ろうとします。
アセットを開始するためのjavaを探します。
Javaコード:
String[] commands = new String[] {"sample.exe" };
p = Runtime.getRuntime().exec(commands);
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
line = br.readLine()
System.out.println(line);
if(line.toLowerCase().contains("failed")){
#Apply business Rule.
}
}
出力:
1
3
5
出力以上のことから、我々が2,3,5,failed
のようなデータが欠落していることは明らかです。
InputStreamReader
を使用して読み込む前に資産が完成したと思います。 InputStreamReader
を使用して読み込み、次の命令セットを開始するまで資産を待機させる方法はありますか、これを行うには他にもっと良い方法があります。
EDIT1:私も並行してエラーストリームを読んでいる私の元のコードで
コードを見つけてください。
ErrorStreamReader:
public void run() {
try {
InputStreamReader isr = new InputStreamReader (is);
BufferedReader br = new BufferedReader (isr);
while (true) {
String s = br.readLine();
System.out.println(s+"error Stream");
if (s == null) break;
}
is.close();
} catch (Exception ex) {
System.out.println ("Problem reading stream " + name + "... :" + ex);
ex.printStackTrace();
}
}
EXE実行部Javaコード:
String[] commands = new String[] {"sample.exe" };
p = Runtime.getRuntime().exec(commands);
Thread errorStream = new Thread(new ReadStream("stderr",
p.getErrorStream()) # Reads error Stream In parallel
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
line = br.readLine()
System.out.println(line);
if(line.toLowerCase().contains("failed")){
#Apply business Rule.
}
}
入力ストリームリーダは、一度に1つの行をスキップして読んでいるように見えます。
EDIT2:私はInputStreamReader
は私が6
に1
から印刷するEXE(Pythonスクリプト)で変更を行った後、失敗した偶数ラインを欠落していたという考えの下にあったので
。私は奇数ラインをしないのです思ったよう
1
3
5
Failed
:
修正EXE出力:
1
2
3
4
5
6
Failed
は今InputStreamReaderの出力は
Java出力ました。誰かが私に原因を教えてもらえますか?
注:
問題は 不都合が生じたために二度申し訳ありませんInputStreamを読んによるものでした。非常に残念です。
あなたが間違った方向に見えているようです。コードはうまく見えて、あなたが記述したものでうまくいくはずです。 sample.exeはそれを返します。あなたが見ているもの。 – mtk
これはexeファイルが1と4だけを印刷するようです。 – f1sh
これは参考になりますhttp://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html? page = 2 – stacker