ile okuma yaparken eksik satır Çıktının altına yazdırılan bir örnek EXE var.Giriş akışı okuyucusu
EXE'leri Çıktı: java
1
2
3
4
5
Failed
eşdeğer kod:
for (int i = 1; i <= 5; i++){
System.out.println(i);
}
System.out.println("Failed");
java kodu kullanarak EXE başlatmak ve bazı veriler kaybolursa çıkışı okumaya çalışıyorum.
Öğeyi başlatmak için java'yı bulun.
Java Kodu:
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.
}
}
Çıktı: biz 2,3,5,failed
gibi eksik veri olduğu açıktır çıktı Yukarıdan
1
3
5
.
Öğenin, InputStreamReader
numaralı telefonu kullanarak okumadan önce tamamlandığını düşünüyorum. Öğeyi InputStreamReader
kullanarak okuyana kadar beklemenin bir yolu var mı ve bir sonraki yönerge setine başla ya da bunu yapmanın başka bir yolu daha var.
Edit1: benim orijinal kodunda
Ben de kod bulabilirsiniz paralel olarak hata akımını okuyorum.
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 yürütücüsü Java kodu: Bu okuyucu her seferinde bir satır atlayarak okuma giriş akışı benzeyen
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.
}
}
.
EDIT2: InputStreamReader
Ben 6
için 1
yazdırmak için EXE (bir piton script) bir değişiklik yapılmış ve daha sonra başarısız çift sayı hatları eksikti düşüncesi içinde olduğundan
. Ben tek sayılı satırları eksik düşünce gibi
1
3
5
Failed
:
Modifiye EXE Çıktı:
1
2
3
4
5
6
Failed
Şimdi InputStreamReader çıkışı
Java Çıktı oldu.Birisi bana nedenini bildirir misiniz?
Not:
sorun rahatsızlıktan dolayı iki kez özür InputStream okuma kaynaklanıyordu. Çok üzgünüm.
yanlış yöne bakıyormuş gibi görünüyorsunuz .. kod iyi görünüyor ve anlattığınız şey için çalışmalı. sample.exe bu şekilde dönecekti .. ne görüyorsun. – mtk
Bu exe dosyanız sadece 1 ve 4 baskıları gibi görünüyor. – f1sh
Bu yararlı olabilir http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html? sayfa = 2 – stacker