【问题标题】:How to display all lines of text from a file instead of stopping at the end of a line?如何显示文件中的所有文本行而不是在行尾停止?
【发布时间】:2016-11-29 13:53:25
【问题描述】:

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

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

【问题讨论】:

  • 你需要一个循环。你只要求一行。
  • 您只阅读了该行一次。您需要像这样添加一个while循环:while (br.readLine() != null) { line = br.readLine(); },然后将其附加到带有换行符的字符串(此操作也需要在循环内)。
  • @IshitaSinha 那只会显示偶数行。这不是读取文本文件的正确方法。
  • @EJP 看看接受的答案。 :P 这是我提到的方法的详细说明。

标签: java android string file bufferedreader


【解决方案1】:

您可以遍历readLine() 的结果并累积它们,直到您得到一个null,表示文件结束(顺便说一句,请注意您的sn-p 忽略了关闭阅读器。一个try-with-资源结构可以处理):

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

【讨论】:

    【解决方案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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      • 1970-01-01
      • 2021-09-20
      • 2014-10-29
      • 2019-02-21
      • 1970-01-01
      • 2020-11-17
      相关资源
      最近更新 更多