在本教程中,我們將通過(guò)一個(gè)示例了解Java Reader、它的子類(lèi)和它的方法。
java.io包的Reader類(lèi)是一個(gè)抽象超類(lèi),它代表字符流。
由于Reader是抽象類(lèi),因此它本身不起作用。但是,其子類(lèi)可用于讀取數(shù)據(jù)。
為了使用的功能Reader,我們可以使用其子類(lèi)。他們之中有一些是:
在下一個(gè)教程中,我們將學(xué)習(xí)所有這些子類(lèi)。
為了創(chuàng)建一個(gè)Reader,我們必須首先導(dǎo)入java.io.Reader包。導(dǎo)入軟件包后,就可以創(chuàng)建Reader。
// 創(chuàng)建 Reader Reader input = new FileReader();
在這里,我們使用FileReader類(lèi)創(chuàng)建了一個(gè)Reader。這是因?yàn)镽eader是一個(gè)抽象類(lèi)。因此,我們無(wú)法創(chuàng)建Reader的對(duì)象。
注意:我們還可以從的其他子類(lèi)創(chuàng)建ReaderReader。
本Reader類(lèi)提供由它的子類(lèi)實(shí)現(xiàn)的方法不同。以下是一些常用方法:
ready() - 檢查Reader是否準(zhǔn)備好讀取
read(char[] array) - 從流中讀取字符并存儲(chǔ)在指定的數(shù)組中
read(char[] array, int start, int length)- 從流中讀取length相等的字符數(shù),并從start開(kāi)始存儲(chǔ)在指定的數(shù)組中
mark() - 標(biāo)記流中已讀取數(shù)據(jù)的位置
reset() - 重置流。如果流已被標(biāo)記,然后嘗試進(jìn)行標(biāo)記,以重新定位。如果該流未被標(biāo)注,然后嘗試將其復(fù)位在適當(dāng)?shù)奶囟鞯囊恍┓椒?,例如通過(guò)將其重新定位到其起始點(diǎn)。
skip() -從流中丟棄指定數(shù)量的字符
這是我們?nèi)绾问褂肍ileReader類(lèi)實(shí)現(xiàn)Reader的方法。
假設(shè)我們有一個(gè)名為input.txt的文件,其中包含以下內(nèi)容。
This is a line of text inside the file.
讓我們嘗試使用FileReader(Reader的子類(lèi))讀取此文件。
import java.io.Reader; import java.io.FileReader; class Main { public static void main(String[] args) { // 創(chuàng)建一個(gè)字符數(shù)組 char[] array = new char[100]; try { //使用FileReader創(chuàng)建Reader Reader input = new FileReader("input.txt"); //檢查Reader是否準(zhǔn)備就緒 System.out.println("流中有數(shù)據(jù)嗎? " + input.ready()); //讀取字符 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ù)嗎? true 流中的數(shù)據(jù): This is a line of text inside the file.
在上面的示例中,我們使用FileReader類(lèi)創(chuàng)建了一個(gè)讀取器。Reader與文件input.txt鏈接。
Reader input = new FileReader("input.txt");
為了從input.txt文件讀取數(shù)據(jù),我們已經(jīng)實(shí)現(xiàn)了這些方法。
input.read(); //從reader讀取數(shù)據(jù) input.close(); //關(guān)閉reader