2010-04-22 20 views
5

Ich versuche, die Ausgabe eines Shell-Befehls in einen String-Puffer zu lesen, das Lesen und Hinzufügen der Werte ist in Ordnung, mit Ausnahme der Tatsache, dass die addierten Werte jede zweite Zeile in der Shell-Ausgabe sind. zum Beispiel, ich habe 10 Zeilen od Shell-Ausgabe und dieser Code speichert nur die 1, 3, 5, 7, 9, Zeile. Kann jemand darauf hinweisen, warum ich nicht jede Zeile mit diesem Code fangen kann ??? jede Anregung oder Idee ist willkommen :)Speichern von Shell-Ausgabe

import java.io.*; 

public class Linux { 

    public static void main(String args[]) { 


     try { 
     StringBuffer s = new StringBuffer(); 

    Process p = Runtime.getRuntime().exec("cat /proc/cpuinfo"); 
    BufferedReader input = 
      new BufferedReader(new InputStreamReader(p.getInputStream())); 
    while (input.readLine() != null) { 
     //System.out.println(line); 
    s.append(input.readLine() + "\n"); 

    } 
    System.out.println(s.toString()); 



} catch (Exception err) { 
    err.printStackTrace(); 
} } 
} 

Antwort

3

Jedes Mal, wenn Sie rufen input.readLine() Sie eine neue Zeile gerade lesen. Du machst nichts mit dem, was du in der while() Erklärung gelesen hast, du lässt es einfach auf den Boden fallen. Sie müssen den Wert vorübergehend speichern und im Schleifenkörper verarbeiten. Hier

+0

Hallo, Vielen Dank für Ihre Antwort. Ich habe versucht, mit diesem auch während (s.append (input.readLine())! = Null) { \t //System.out.println(line); \t s.append (input.readLine() + "\ n"); } Aber der Code bleibt stecken, können Sie mir ein Beispiel einfügen ?? –

7

ist der Code, den ich in der Regel mit BufferedReader verwenden in Situationen wie dieser:

StringBuilder s = new StringBuilder(); 
Process p = Runtime.getRuntime().exec("cat /proc/cpuinfo"); 
BufferedReader input = 
    new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line = null; 
//Here we first read the next line into the variable 
//line and then check for the EOF condition, which 
//is the return value of null 
while((line = input.readLine()) != null){ 
    s.append(line); 
    s.append('\n'); 
} 

Auf einer halbbezogene Notiz, wenn Ihr Code nicht sein muss Thread-sicher ist es besser, String stattdessen verwenden von StringBuffer als StringBuffer ist synchronisiert.