在本教程中,我們將借助示例學(xué)習(xí)Java FileReader及其方法。
java.io包的FileReader類可用于從文件中讀取數(shù)據(jù)(以字符為單位)。
它繼承了InputSreamReader類。
在學(xué)習(xí)之前FileReader,請(qǐng)確保您了解Java文件。
為了創(chuàng)建一個(gè)文件閱讀器,我們必須首先導(dǎo)入java.io.FileReader包。導(dǎo)入程序包后,這里是創(chuàng)建文件閱讀器的方法。
1.使用文件名
FileReader input = new FileReader(String name);
在這里,我們創(chuàng)建了一個(gè)文件閱讀器,該文件閱讀器將鏈接到所指定的文件名。
2.使用文件的對(duì)象
FileReader input = new FileReader(File fileObj);
在這里,我們創(chuàng)建了一個(gè)文件讀取器,該文件讀取器將鏈接到文件對(duì)象所指定的文件。
在上面的示例中,文件中的數(shù)據(jù)使用某些默認(rèn)字符編碼存儲(chǔ)。
但是,由于Java 11,我們也可以在文件中指定字符編碼的類型(UTF-8或UTF-16)。
FileReader input = new FileReader(String file, Charset cs);
在這里,我們使用Charset類來(lái)指定文件閱讀器的字符編碼。
FileReader類提供Reader類中存在的不同方法的實(shí)現(xiàn)。
read() - 從閱讀器讀取單個(gè)字符
read(char[] array) - 從閱讀器讀取字符并將其存儲(chǔ)在指定的數(shù)組中
read(char[] array, int start, int length) - 從讀取器讀取等于length的字符數(shù),并從位置start開(kāi)始存儲(chǔ)在指定的數(shù)組中
例如,假設(shè)我們有一個(gè)名為input.txt的文件,其中包含以下內(nèi)容。
This is a line of text inside the file.
讓我們嘗試使用讀取文件FileReader。
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)建閱讀器 FileReader input = new FileReader("input.txt"); //讀取字符 input.read(array); System.out.println("Data in the file: "); System.out.println(array); // 關(guān)閉 reader input.close(); } catch(Exception e) { e.getStackTrace(); } } }
輸出結(jié)果
Data in the file: This is a line of text inside the file.
在上面的示例中,我們創(chuàng)建了一個(gè)名為input的文件閱讀器。文件閱讀器與文件input.txt鏈接。
FileInputStream input = new FileInputStream("input.txt");
為了從文件中讀取數(shù)據(jù),我們使用了read()方法。
getEncoding()方法可用于獲取用于在文件中存儲(chǔ)數(shù)據(jù)的編碼類型。例如,
import java.io.FileReader; import java.nio.charset.Charset; class Main { public static void main(String[] args) { try { //使用默認(rèn)編碼創(chuàng)建一個(gè)FileReader FileReader input1 = new FileReader("input.txt"); //創(chuàng)建一個(gè)FileReader指定編碼 FileReader input2 = new FileReader("input.txt", Charset.forName("UTF8")); //返回文件閱讀器的字符編碼 System.out.println("input1的字符編碼: " + input1.getEncoding()); System.out.println("input2的字符編碼: " + input2.getEncoding()); //關(guān)閉 reader input1.close(); input2.close(); } catch(Exception e) { e.getStackTrace(); } } }
輸出結(jié)果
input1的字符編碼: Cp1252 input2的字符編碼: UTF8
在上面的示例中,我們創(chuàng)建了2個(gè)文件閱讀器,分別名為input1和input2。
input1沒(méi)有指定字符編碼。因此,getEncoding()方法返回默認(rèn)字符編碼。
input2指定字符編碼UTF8。因此,getEncoding()方法返回指定的字符編碼。
注意:我們已經(jīng)使用該Charset.forName()方法指定字符編碼的類型。
要關(guān)閉文件閱讀器,我們可以使用close()方法。調(diào)用close()方法后,我們將無(wú)法使用讀取器讀取數(shù)據(jù)。
方法 | 描述 |
---|---|
ready() | 檢查文件閱讀器是否準(zhǔn)備好閱讀 |
mark() | 標(biāo)記文件讀取器中已讀取數(shù)據(jù)的位置 |
reset() | 重置閱讀器,返回到閱讀器中設(shè)置標(biāo)記的位置 |