如何将Bash脚本的输出显示为Java中的文本视图列表?

huangapple go评论68阅读模式
英文:

How to show the output of script bash in textview as list in java?

问题

以下是您要求的翻译内容:

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 + "\n");
        }
    }
    TextView tv = (TextView) findViewById(R.id.textview1);
    tv.setText(result.toString());
    
} catch (Exception s) {
    finishAffinity();
}

这是输出:

如何将Bash脚本的输出显示为Java中的文本视图列表?

请帮我编辑这段代码,以便结果逐行显示。

英文:

I'm using this code to execute bash commands and all is fine in that just when I execute it the displayed output appears like paragraph and not list.
Before it was without line split, I tried to split string lines so below is my result, and this is my code:

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

This is the output:

如何将Bash脚本的输出显示为Java中的文本视图列表?

Please help me edit this code so that the result appears one below one.

答案1

得分: 0

首先:BufferedReader.readLine() 返回一行没有换行符的文本,因此

String[] lines = linee.split("\\r?\\n");

总是返回长度为1的数组,其中包含linee。您应该移除这段代码。

其次:您的行计数器 count 在每次读取一行后都被重置为1,因此无论您读取了多少行,输出始终会包含“line 1:”。

将该计数变量移到 while 循环外以纠正此问题。

第三:您正在将行追加到 result 中,但没有在它们之间添加换行符,因此得到的只是一个单独的段落。

添加换行符(\n)以纠正此问题。

最终,您的代码的核心部分应该如下所示:

StringBuilder result = new StringBuilder();
String line;
int count = 1;
while ((line = bufferedReader.readLine()) != null) {
    result.append("line " + (count++) + " : " + line + "\n");
}
英文:

First: BufferedReader.readLine() returns a single line of text without a line break, so

String[] lines = linee.split("\\r?\\n");

always returns an array of length 1 containing linee. You should remove this code.


Second: your line counter count is reset to 1 after each line read, so your output will always contain "line 1: ", no matter how many lines you read.

Move that count variable outside of the while loop to correct this.


Third: You are appending the lines to result without line breaks between, so all you get is a single paragraph.

Add a line break character ("\n") to correct this.


In the end the central part of your code should look like this:

StringBuilder result=new StringBuilder();
String line;
int count = 1;
while ((line = bufferedReader.readLine()) != null) {
    result.append("line " + (count++) + " : " + line + "\n");
}

huangapple
  • 本文由 发表于 2020年9月21日 04:56:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/63983584.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定