搜尋

首頁  >  問答  >  主體

java - 关于BufferedReader中readLine读取最后一行的问题

public static void main(String[] args) throws Exception{

    BufferedReader in = new BufferedReader(new FileReader("Test3.txt"));
    String line =null;
    while((line=in.readLine())!=null)
    {
        System.out.println(line);
    }
}

想问一下通过readLine方法读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行,但是在最后一行的时候并没有换行或者回车的字符啊,此时为什么会读取到最后一行呢?按理说最后一行是不应该被读取到的。求解!

巴扎黑巴扎黑2805 天前2072

全部回覆(2)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 15:01:34

    在BufferedReader中有一個private方法是用來判斷是否到達Stream的結尾的,如下:

    • @return the number of chars read into the buffer, or -1 if the end of the source stream has been reached.

     private int fillBuf() throws IOException {
    

    而在rea​​dLine()中有一段是這麼寫的:

     while (true) {
        pos = end;
        if (fillBuf() == -1) {
            // If there's no more input, return what we've read so far, if anything.
            return (result.length() > 0) ? result.toString() : null;
        }
        ...
    

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 15:01:34

    這個可以看下BufferedReader的源碼,其實還有一種情況,就是讀到了文件結束位置(也就是最後一行),即使沒有n和r也會回傳這一行。

    if (nextChar >= nChars) { /* EOF */
      if (s != null && s.length() > 0)
        return s.toString();
      else
        return null;
    }

    回覆
    0
  • 取消回覆