2016-11-17 2 views
7

次の出力を出力するサンプル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は私が61から印刷するEXE(Pythonスクリプト)で変更を行った後、失敗した偶数ラインを欠落していたという考えの下にあったので

。私は奇数ラインをしないのです思ったよう

1 
3 
5 
Failed 

修正EXE出力:

1 
2 
3 
4 
5 
6 
Failed 

は今InputStreamReaderの出力は

Java出力ました。誰かが私に原因を教えてもらえますか?


注:

問題は 不都合が生じたために二度申し訳ありませんInputStreamを読んによるものでした。非常に残念です。

+3

あなたが間違った方向に見えているようです。コードはうまく見えて、あなたが記述したものでうまくいくはずです。 sample.exeはそれを返します。あなたが見ているもの。 – mtk

+0

これはexeファイルが1と4だけを印刷するようです。 – f1sh

+0

これは参考になりますhttp://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html? page = 2 – stacker

答えて

4

問題は、そこで二回

while ((line = br.readLine()) != null) { 
    line = br.readLine() # input stream read here twice 
    System.out.println(line); 
    if(line.toLowerCase().contains("failed")){ 
      #Apply business Rule. 
    } 
} 

問題をInputStreamを読んによるものでした。それを解決するために、私は一度だけinputStreamを読んでいます。

while ((line = br.readLine()) != null) { 
    System.out.println(line); 
    if(line.toLowerCase().contains("failed")){ 
      #Apply business Rule. 
    } 
} 
関連する問題