Java IO流:(五)节点流(文件流)之 FileReader


一、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这些不是文本文件。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM