#java #android
#java #Android
Вопрос:
Я использую этот код для выполнения команд bash, и все в порядке, потому что при его выполнении отображаемый вывод отображается как абзац, а не список. До того, как он был без разделения строк, я пытался разделить строки, поэтому ниже приведен мой результат, и это мой код:
String[] cmdline = { "sh", "-c", "ls /storage/emulated/0/" };
try {
java.lang.Process process = Runtime.getRuntime().exec(cmdline);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder result = new StringBuilder();
String linee = "";
while ((linee = bufferedReader.readLine()) != null) {
int count = 1;
String[] lines = linee.split("\r?\n");
for (String line : lines) {
result.append("line " count " : " line);
}
}
TextView tv = (TextView) findViewById(R.id.textview1);
tv.setText(result.toString());
} catch (Exception s) {
finishAffinity();
}
Это вывод:
Пожалуйста, помогите мне отредактировать этот код, чтобы результат отображался один под другим.
Ответ №1:
Во-первых: BufferedReader.readLine()
возвращает одну строку текста без разрыва строки, поэтому
String[] lines = linee.split("\r?\n");
всегда возвращает массив длиной 1, содержащий linee
. Вы должны удалить этот код.
Во-вторых: ваш счетчик строк count
сбрасывается на 1 после каждого чтения строки, поэтому ваш вывод всегда будет содержать «строка 1:», независимо от того, сколько строк вы прочитали.
Переместите эту переменную count за пределы while
цикла, чтобы исправить это.
В-третьих: вы добавляете строки result
без разрывов строк между ними, поэтому все, что вы получаете, — это один абзац.
Добавьте символ разрыва строки (» n»), чтобы исправить это.
В итоге центральная часть вашего кода должна выглядеть так:
StringBuilder result=new StringBuilder();
String line;
int count = 1;
while ((line = bufferedReader.readLine()) != null) {
result.append("line " (count ) " : " line "n");
}