Хранение вывода Shell

Я пытаюсь считать вывод команды оболочки в строковый буфер, чтения и добавления, что значения в порядке за исключением того, что добавленные стоимости являются каждой второй строкой в выводе оболочки. например, у меня есть 10 выводов оболочки передозировки строк, и этот код только хранит 1, 3, 5, 7, 9, строка. Кто-либо может указать, почему я не могу поймать каждую строку с этим кодом??? любое предложение или идея одобрены :)

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();
}    }
}
5
задан stommestack 24 May 2014 в 07:52
поделиться

2 ответа

Каждый раз, когда вы вызываете input.readLine () , вы читаете новую строку. Вы ничего не делаете с тем, что вы читаете внутри оператора while () , вы просто позволяете ему упасть на пол. Вам нужно будет временно сохранить его значение и обработать его в теле цикла.

3
ответ дан 13 December 2019 в 22:04
поделиться

Вот код, который я обычно использую с BufferedReader в таких ситуациях:

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');
}

Наполовину связанное с ним примечание: когда ваш код не должен быть потокобезопасным, лучше использовать StringBuilder вместо StringBuffer, поскольку StringBuffer синхронизируется.

7
ответ дан 13 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: