使用BufferedReader循环读文件(新手要注意的细节)

使用BufferedReader(缓存读取流)可以每次读取文件的一行。对于文件内容如果是按行为单位排列的话,则使用BufferedReader来读取文件还是比较方便的。

举例如下

1、BufferedReader读取一行

在F盘下有个txt文件,文件内容为
使用BufferedReader循环读文件(新手要注意的细节)_第1张图片

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 语句在做判断时,其实已经读取了一行,而读取的这行没有被打印出来,所以就造成了只打印了一部分。

你可能感兴趣的:(java学习)