一、FileReader 

  1、FileReader 类概述

    java.io.FileReader 类是读取字符文件的子类。构造时使用系统默认的字符编码和默认字符缓冲区。

    FileReader 是用来操作字符文件的输入流,可以从字符文件中进行读取。

 

    Tips

      ① 字符编码:字节与字符的对应规则,Windows 系统的中文编码默认是GBK编码表,或者为 UTF-8;

      ② 字符缓冲区:一个字节数组,用来临时存储字节数据;

  2、FileReader 类结构及方法

    

 

   3、构造方法

FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象。
FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称。

  

    参数:读取文件的数据源。

      String fileName:文件的路径

      File file:文件对象

    构造方法的作用

      ① 创建一个 FileReader 对象

      ② 会把 FileReader 对象指向要读取的文件

    字符输入流的使用步骤

      ① 创建 FileReader 对象,构造方法中绑定要读取的数据源(选择IO流,创建IO对象)。

      ② 使用 FileReader 对象中的方法 read 读取文件(读/写操作)。

      ③ 释放资源(关闭IO流)。

 

二、常用方法

    可以发现在 FileReader 中并为声明过多的方法,都是调用其父类中已经存在的方法。

int read()

    读取单个字符。 作为整数读取的字符, 范围在 0 到 65535 之间 (0x00-0xffff)(2个字节的Unicode码) , 如果已到达流的末尾, 则返回 -1

int read(char[] cbuf)

    将字符读入数组。 如果已到达流的末尾, 则返回 -1。 否则返回本次读取的字符数。

int read(char[] cbuf,int off,int len)

    将字符读入数组的某一部分。 存到数组cbuf中, 从off处开始存储, 最多读len个字符。 如果已到达流的末尾, 则返回 -1。 否则返回本次读取的字符数。

public void close() throws IOException

    关闭此输入流并释放与该流关联的所有系统资源。

三、案例

  1、将工程下的hello.txt文件内容读入程序中,并输出到控制台

 1     @Test
 2     public void testFileReader() {
 3         FileReader fileReader = null;
 4         try {
 5             //1. 实例化File类的对象,指明要操作的文件
 6             File file = new File("hello.txt");
 7 
 8             //2.提供具体的流
 9             fileReader = new FileReader(file);
10 
11             //3.数据的读入
12             //read():返回读入的一个字符。如果达到文件末尾,返回-1
13             //方式一:
14            /*
15            int data = fileReader.read();
16             while (data != -1) {
17                 System.out.print((char)data);
18                 data = fileReader.read();
19             }
20             */
21             //方式二:语法上针对于方式一的修改
22             int data;
23             while ((data = fileReader.read()) != -1) {
24                 System.out.print((char)data);
25             }
26 
27         } catch (IOException e) {
28             e.printStackTrace();
29         } finally {
30             //4.流的关闭操作
31             //方式一:
32             /*
33             try {
34                 if (fileReader != null) {
35                     fileReader.close();
36                 }
37             } catch (IOException e) {
38                 e.printStackTrace();
39             }
40             */
41             if (fileReader != null) {
42                 try {
43                     fileReader.close();
44                 } catch (IOException e) {
45                     e.printStackTrace();
46                 }
47             }
48         }
49     }

     read 方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回 -,循环读取。

 

  2、使用read的重载方法

    代码实现:

 1     //对read()操作升级:使用read的重载方法
 2     @Test
 3     public void testFileReader1() {
 4         FileReader fileReader = null;
 5         try {
 6             //1. 实例化File类的对象,指明要操作的文件
 7             File file = new File("hello.txt");
 8 
 9             //2.FileReader流的实例化
10             fileReader = new FileReader(file);
11 
12             //3.读入的操作
13             //read(char[] cbuf):返回每次读入cbuf数组中的字符的个数。如果达到文件末尾,返回-1
14             char[] cbuf = new char[5];
15             int len;  //记录的是每次读取的有效字符个数
16             while((len = fileReader.read(cbuf)) != -1){
17                 //方式一:
18                 //错误的写法
19                 /*
20                 for(int i = 0;i < cbuf.length;i++){
21                     System.out.print(cbuf[i]);
22                 }
23                 */
24                 //正确的写法
25                 /*
26                 for (int i = 0; i < len; i++) {
27                     System.out.print(cbuf[i]);
28                 }
29                 */
30 
31                 //方式二:
32                 //错误的写法,对应着方式一的错误的写法
33                 //String str = new String(cbuf);
34                 //System.out.print(str);
35 
36                 //正确的写法
37                 String str = new String(cbuf,0,len);
38                 System.out.print(str);
39             }
40         } catch (IOException e) {
41             e.printStackTrace();
42         } finally {
43             //4.资源的关闭
44             try {
45                 if (fileReader != null) {
46                     fileReader.close();
47                 }
48             } catch (IOException e) {
49                 e.printStackTrace();
50             }
51 
52         }
53     }

 

    read(char[] cbuf) ,每次读取b的长度个字符到数组中,返回读取到的有效字符个数,读取到末尾时,返回 -1。

 

  3、

四、读取文件注意点

  1、异常的处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally处理;

  2、读入的文件一定要存在,否则就会报FileNotFoundException;

  3、字符流操作字符,只能操作普通文本文件。 最常见的文本文件: .txt.java.c.cpp 等语言的源代码。尤其注意.doc,excel,ppt这些不是文本文件。

 

posted on 2021-06-01 12:32  格物致知_Tony  阅读(1049)  评论(0编辑  收藏  举报