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