如何显示文件中的所有文本行而不是停在行尾?

时间:2016-07-26 04:27:47

标签: java android string file bufferedreader

下面的代码只显示第一行代码并停止。我想返回每行代码,直到没有更多。

private String GetPhoneAddress() {
    File directory = Environment.getExternalStorageDirectory();
    File myFile = new File(directory, "mythoughtlog.txt");
    //File file = new File(Environment.getExternalStorageDirectory() + "mythoughtlog.txt");
    if (!myFile.exists()){
        String line = "Need to add smth";
        return line;
    }
    String line = null;
    //Read text from file
    //StringBuilder text = new StringBuilder();
    try {
        BufferedReader br = new BufferedReader(new FileReader(myFile));
        line = br.readLine();
    }
    catch (IOException e) {
        //You'll need to add proper error handling here
    }
    return line;
}

2 个答案:

答案 0 :(得分:2)

你可以循环readLine()的结果并累积它们,直到你得到一个null,表示文件的结尾(顺便说一句,请注意你的代码片段忽略了关闭阅读器。 with-resource结构可以处理):

try (BufferedReader br = new BufferedReader(new FileReader(myFile))) {
    String line = br.readLine();
    if (line == null) {
        return null;
    }
    StringBuilder retVal = new StringBuilder(line);
    line = br.readLine();
    while (line != null) {
        retVal.append(System.lineSeparator()).append(line);
        line = br.readLine();
    }
    return retVal.toString();
}

如果您正在使用Java 8,则可以使用新引入的lines()方法保存大量此类符合样本的代码:

try (BufferedReader br = new BufferedReader(new FileReader(myFile))) {
    return br.lines().collect(Collectors.joining(System.lineSeparator()));
}

答案 1 :(得分:2)

一个相当简洁的解决方案:

try (BufferedReader br = new BufferedReader(new FileReader(myFile))) {
    StringBuilder retVal = new StringBuilder();
    while ((line = br.readLine()) != null) {
        retVal.append(line).append(System.lineSeparator());
    }
    return retVal.toString();
}