在本教程中,我們將借助示例學(xué)習(xí)Java BufferedReader及其方法。
java.io包的BufferedReader類可以與其他閱讀器一起使用,以更有效地讀取數(shù)據(jù)(以字符為單位)。
它繼承了抽象類Reader。
BufferedReader維護(hù)一個內(nèi)部的8192個字符緩沖器。
在BufferedReader中進(jìn)行讀取操作期間,將從磁盤讀取一部分字符并將其存儲在內(nèi)部緩沖區(qū)中。 并且從內(nèi)部緩沖區(qū)中單獨讀取字符。
因此,減少了與磁盤的通信次數(shù)。這就是使用BufferedReader可以更快地讀取字符的原因。
為了創(chuàng)建一個BufferedReader,我們必須首先導(dǎo)入java.io.BuferedReader包。導(dǎo)入軟件包后,就可以創(chuàng)建閱讀器。
//創(chuàng)建一個FileReader FileReader file = new FileReader(String file); //創(chuàng)建一個BufferedReader BufferedReader buffer = new BufferedReader(file);
在上面的示例中,我們創(chuàng)建了一個名為buffer的BufferedReader和一個名為file的FileReader。
此處,BufferedReader的內(nèi)部緩沖區(qū)的默認(rèn)大小為8192個字符。 但是,我們也可以指定內(nèi)部緩沖區(qū)的大小。
//創(chuàng)建一個具有指定大小的內(nèi)部緩沖區(qū)的BufferdReader BufferedReader buffer = new BufferedReader(file, int size);
緩沖區(qū)將有助于更快地從文件中讀取字符。
BufferedReader類為Reader中的不同方法提供了實現(xiàn)。
read() - 從閱讀器的內(nèi)部緩沖區(qū)讀取單個字符
read(char[] array) - 從閱讀器讀取字符并將其存儲在指定的數(shù)組中
read(char[] array, int start, int length)- 從閱讀器讀取等于length字符的數(shù)量,并從start位置開始存儲在指定的數(shù)組中
例如,假設(shè)我們有一個名為input.txt的文件,其中包含以下內(nèi)容。
This is a line of text inside the file.
讓我們嘗試使用BufferedReader讀取文件。
import java.io.FileReader; import java.io.BufferedReader; class Main { public static void main(String[] args) { //創(chuàng)建一個字符數(shù)組 char[] array = new char[100]; try { //創(chuàng)建 FileReader FileReader file = new FileReader("input.txt"); //創(chuàng)建 BufferedReader BufferedReader input = new BufferedReader(file); //讀取字符 input.read(array); System.out.println("文件中的數(shù)據(jù): "); System.out.println(array); //關(guān)閉 reader input.close(); } catch(Exception e) { e.getStackTrace(); } } }
輸出結(jié)果
文件中的數(shù)據(jù): This is a line of text inside the file.
在上面的示例中,我們創(chuàng)建了一個名為input的緩沖讀取器。緩沖的閱讀器與input.txt文件鏈接。
FileReader file = new FileReader("input.txt"); BufferedReader input = new BufferedReader(file);
在這里,我們使用read()方法從緩沖讀取器的內(nèi)部緩沖區(qū)中讀取字符數(shù)組。
要丟棄和跳過指定數(shù)量的字符,可以使用skip()方法。例如
import java.io.FileReader; import java.io.BufferedReader; public class Main { public static void main(String args[]) { //創(chuàng)建一個字符數(shù)組 char[] array = new char[100]; try { //假設(shè)input.txt文件包含以下文本 //This is a line of text inside the file. FileReader file = new FileReader("input.txt"); //創(chuàng)建 BufferedReader BufferedReader input = new BufferedReader(file); //跳過5個字符 input.skip(5); //讀取字符 input.read(array); System.out.println("跳過5個字符后的數(shù)據(jù):"); System.out.println(array); //關(guān)閉 reader input.close(); } catch (Exception e) { e.getStackTrace(); } } }
輸出結(jié)果
跳過5個字符后的數(shù)據(jù): is a line of text inside the file.
在上面的示例中,我們使用了skip()方法從文件讀取器中跳過5個字符。因此,字符'T','h','i','s'和' '從原始文件跳過。
要關(guān)閉緩沖的讀取器,我們可以使用close()方法。調(diào)用close()方法后,我們將無法使用讀取器讀取數(shù)據(jù)。
方法 | 描述 |
---|---|
ready() | 檢查文件閱讀器是否準(zhǔn)備好閱讀 |
mark() | 標(biāo)記讀取器中已讀取數(shù)據(jù)的位置 |
reset() | 重置標(biāo)記,返回到閱讀器中設(shè)置標(biāo)記的位置 |