Java知多少(67)面向字元的輸入資料流

來源:互聯網
上載者:User

標籤:

字元流是針對字元資料的特點進行過最佳化的,因而提供一些面向字元的有用特性,字元流的源或目標通常是文字檔。 Reader和Writer是java.io包中所有字元流的父類。由於它們都是抽象類別,所以應使用它們的子類來建立實體物件,利用對象來處理相關的讀寫操作。Reader和Writer的子類又可以分為兩大類:一類用來從資料來源讀入資料或往目的地寫出資料(稱為節點流),另一類對資料執行某種處理(稱為處理流)。

面向字元的輸入資料流類都是Reader的子類,其類階層10-2所示。


圖10-2 Reader的類階層圖


表 10-1 列出了 Reader 的主要子類及說明。

表 10-1 Reader 的主要子類
類名 功能描述
CharArrayReader 從字元數組讀取的輸入資料流
BufferedReader 緩衝輸入字元流
PipedReader 輸入管道
InputStreamReader 將位元組轉換到字元的輸入資料流
FilterReader 過濾輸入資料流
StringReader 從字串讀取的輸入資料流
LineNumberReader 為輸入資料附加行號
PushbackReader 返回一個字元並把此位元組放回輸入資料流
FileReader 從檔案讀取的輸入資料流


Reader 所提供的方法如表 10-2 所示,可以利用這些方法來獲得流內的位元據。

表 10-2 Reader 的常用方法
方法 功能描述
void close() 關閉輸入資料流
void mark() 標記輸入資料流的當前位置
boolean markSupported() 測試輸入資料流是否支援 mark
int read() 從輸入資料流中讀取一個字元
int read(char[] ch) 從輸入資料流中讀取字元數組
int read(char[] ch, int off, int len) 從輸入資料流中讀 len 長的字元到 ch 內
boolean ready() 測試流是否可以讀取
void reset() 重定位輸入資料流
long skip(long n) 跳過流內的 n 個字元
使用 FileReader 類讀取檔案

FileReader 類是 Reader 子類 InputStreamReader 類的子類,因此 FileReader 類既可以使用Reader 類的方法也可以使用 InputStreamReader 類的方法來建立對象。

在使用 FileReader 類讀取檔案時,必須先調用 FileReader()構造方法建立 FileReader 類的對象,再調用 read()方法。FileReader 構造方法的格式為:
    public FileReader(String name);  //根據檔案名稱建立一個可讀取的輸入資料流對象

【例 10-1】利用 FileReader 類讀取純文字檔案的內容(查看原始碼)。

運行結果 10-3 所示:


圖 10-3  例 10_1 運行結果(輸出內容為檔案ep10_1.txt的內容)


需要注意的是,Java 把一個漢字或英文字母作為一個字元對待,斷行符號或換行作為兩個字元對待。

使用 BufferedReader 類讀取檔案

BufferedReader 類是用來讀取緩衝區中的資料。使用時必須建立 FileReader 類對象,再以該對象為參數建立 BufferedReader 類的對象。BufferedReader 類有兩個構造方法,其格式為:
    public BufferedReader(Reader in);  //建立緩衝區字元輸入資料流
    public BufferedReader(Reader in,int size);  //建立輸入資料流並設定緩衝區大小

【例 10-2】利用 BufferedReader 類讀取純文字檔案的內容(查看原始碼)。

運行結果 10-4 所示:


圖 10-4  例 10_2 運行結果


需要注意的是,執行 read()或 write()方法時,可能由於 IO 錯誤,系統拋出 IOException 異常,需要將執行讀寫操作的語句包括在 try 塊中,並通過相應的 catch 塊來處理可能產生的異常。

系列文章:Java知多少(上)Java知多少(39)interface介面Java知多少(40)介面和抽象類別的區別Java知多少(41)泛型詳解Java知多少(42)泛型萬用字元和型別參數的範圍Java知多少(43)異常處理基礎Java知多少(44)異常類型Java知多少(45)未被捕獲的異常Java知多少(46)try和catch的使用Java知多少(47)多重catch語句的使用Java知多少(48)try語句的嵌套Java知多少(49)throw:異常的拋出Java知多少(50)Java throws子句Java知多少(51)finallyJava知多少(52)內建異常Java知多少(53)使用Java建立自己的異常子類Java知多少(54)斷言詳解Java知多少(55)線程Java知多少(56)執行緒模式Java知多少(57)主線程Java知多少(58)線程Runnable介面和Thread類詳解Java知多少(59)建立多線程Java知多少(60)isAlive()和join()的使用Java知多少(61)線程優先順序Java知多少(62)線程同步Java知多少(63)線程間通訊Java知多少(64)線程死結Java知多少(65)線程的掛起、恢複和終止Java知多少(66)輸入輸出(IO)和流的概述

Java知多少(67)面向字元的輸入資料流

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.