如何使用BufferedReader循環讀文件

使用BufferedReader(緩存讀取流)可以每次讀取文件的一行。對於文件內容如果是按行為單位排列的話,則使用BufferedReader來讀取文件還是比較方便的。

舉例如下

1、BufferedReader讀取一行

在F盤下有個txt文件,文件內容為

在這裡插入圖片描述

import java.io.*;
public class test {
    public static void main(String[] args)  {
	BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("F:\\test.txt"));
            System.out.println(br.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
}

結果為:

哈哈0

2、BufferedReader循環讀每一行

import java.io.*;
public class test {
    public static void main(String[] args)  {
	BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("F:\\test.txt"));
            String text = null;
            //讀取內容為null則表示讀到瞭文件末尾
        	while ((text = br.readLine()) != null) {
            System.out.println(text);
       		 }
        } catch (IOException e) {
            e.printStackTrace();
        }
}

結果為:

哈哈0
哈哈1
哈哈2
哈哈3
哈哈4
哈哈5
哈哈6
哈哈7
哈哈8
哈哈9

3、註意細節

新手如果沒不註意,容易寫成:

import java.io.*;
public class test {
    public static void main(String[] args)  {
	BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("F:\\test.txt"));
            String text = null;
            //
        	while (true) {
	            if (br.readLine() == null) {
	                break;
	            }
            System.out.println(br.readLine());
       		 }
        } catch (IOException e) {
            e.printStackTrace();
        }
}

結果為:

哈哈1
哈哈3
哈哈5
哈哈7
哈哈9

原因

while (true) {
    if (br.readLine() == null) {
        break;
    }
   System.out.println(br.readLine());
 }

因為在while循環中, if 語句在做判斷時,其實已經讀取瞭一行,而讀取的這行沒有被打印出來,所以就造成瞭隻打印瞭一部分。

BufferedReader.rean(buffer)註意事項

最近遇到一個問題

BufferedReader.rean(buffer)

讀取數據時,最後一行必須獲取到返回值

len=BufferedReader.rean(buffer)

隻能取0到len區間的數據,len之後的數據為上次讀取過的數據,原因是因為buffer讀取時不會清空數組。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: