Java使用FileReader讀取文件詳解
前言
在Java編程中,經(jīng)常需要讀取文件的內(nèi)容,這時(shí)我們需要使用FileReader類。FileReader是Java IO庫(kù)中的一個(gè)用于讀取字符流的類,它繼承自InputStreamReader。
摘要
本文將介紹FileReader類的基本用法,包括如何創(chuàng)建FileReader對(duì)象,如何讀取文件,以及如何關(guān)閉流。文章將通過(guò)示例演示FileReader類的使用,在代碼中將有詳細(xì)的注釋說(shuō)明,方便讀者理解。
正文
創(chuàng)建FileReader對(duì)象
在使用FileReader類讀取文件之前,我們需要先創(chuàng)建FileReader對(duì)象。創(chuàng)建FileReader對(duì)象的方法如下:
FileReader reader = new FileReader("path/to/file");這里的"path/to/file"是文件的路徑,可以是相對(duì)路徑或絕對(duì)路徑。如果文件路徑不正確或文件不存在,將會(huì)拋出FileNotFoundException異常。
讀取文件
FileReader類提供了多種方法用于讀取文件,其中最常用的方法是read()。read()方法可以讀取一個(gè)字符。示例代碼如下:
FileReader reader = new FileReader("path/to/file");
int data = reader.read();
while (data != -1) {
char ch = (char) data;
System.out.print(ch);
data = reader.read();
}上面的代碼中,將會(huì)逐個(gè)字符讀取文件并打印出來(lái)。在讀取文件時(shí),read()方法返回的是字符的ASCII碼。如果已經(jīng)到達(dá)文件的末尾,read()方法將會(huì)返回-1。
除了read()方法之外,F(xiàn)ileReader類還提供了其他多種方法用于讀取文件,如read(char[] cbuf)、read(char[] cbuf, int off, int len)等。這些方法可以一次性讀取多個(gè)字符。
關(guān)閉流
在使用完FileReader流之后,我們需要關(guān)閉流以釋放系統(tǒng)資源。關(guān)閉流的方法如下:
reader.close();
關(guān)閉流之后,將無(wú)法再?gòu)牧髦凶x取數(shù)據(jù)。
讀取文件的注意事項(xiàng)
使用FileReader時(shí),需要注意以下幾點(diǎn):
- 需要手動(dòng)關(guān)閉FileReader對(duì)象,否則會(huì)占用過(guò)多的系統(tǒng)資源。
- FileReader類默認(rèn)使用系統(tǒng)默認(rèn)編碼來(lái)讀取文件,如果文件的編碼格式不是默認(rèn)編碼格式,可能會(huì)導(dǎo)致讀取到的數(shù)據(jù)出現(xiàn)亂碼。
- 如果要讀取比較大的文件,建議使用BufferedReader進(jìn)行緩存,加快讀取速度。
示例代碼
下面是一個(gè)完整的示例代碼,其中實(shí)現(xiàn)了讀取文件、關(guān)閉流等功能。
package com.example.javase.io;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.FileReader;
import java.io.IOException;
/**
* @date 2023/9/12 15:57
*/
@SpringBootTest
public class FileReaderTest {
@Test
public void fileReaderTest() throws IOException {
FileReader reader = null;
reader = new FileReader("./template/hello.txt");
int data = reader.read();
while (data != -1) {
char ch = (char) data;
System.out.print(ch);
data = reader.read();
}
}
}示例代碼執(zhí)行結(jié)果如下:

讀取文件截圖如下:

方法介紹
| 方法 | 描述 |
|---|---|
| public FileReader(String fileName) throws FileNotFoundException | 創(chuàng)建FileReader對(duì)象 |
| public int read() throws IOException | 讀取一個(gè)字符 |
| public int read(char[] cbuf) throws IOException | 讀取多個(gè)字符到緩沖區(qū) |
| public int read(char[] cbuf, int off, int len) throws IOException | 讀取多個(gè)字符到緩沖區(qū),從指定的偏移量開始 |
| public void close() throws IOException | 關(guān)閉流 |
測(cè)試用例
我們可以編寫一些簡(jiǎn)單的測(cè)試用例,測(cè)試FileReader類的基本功能。
package com.example.javase.io;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.FileReader;
import java.io.IOException;
/**
* @date 2023/9/12 15:57
*/
@SpringBootTest
public class FileReaderTest {
private FileReader reader;
@Before
public void setUp() throws Exception {
reader = new FileReader("./template/hello.txt");
}
@After
public void tearDown() throws Exception {
if (reader != null) {
reader.close();
}
}
@Test
public void testRead() throws IOException {
int data = reader.read();
Assert.assertEquals(data, 104);
}
@Test
public void testReadCharArray() throws IOException {
char[] cbuf = new char[4];
int len = reader.read(cbuf);
Assert.assertEquals(len, 4); //cbuf:[h,e,l,l]
Assert.assertEquals(cbuf[0], 'h');
}
@Test
public void testReadCharArrayOffLen() throws IOException {
char[] cbuf = new char[4];
int len = reader.read(cbuf, 1, 2); //cbuf:[,h,e,]
Assert.assertEquals(len, 2);
Assert.assertEquals(cbuf[1], 'h');
}
}執(zhí)行結(jié)果如下:

全文小結(jié)
本文主要介紹了Java中的FileReader類,包括如何創(chuàng)建FileReader對(duì)象、如何讀取文件以及如何關(guān)閉流等內(nèi)容。通過(guò)示例代碼,我們可以更好地理解FileReader類的使用方法。
到此這篇關(guān)于Java使用FileReader讀取文件詳解的文章就介紹到這了,更多相關(guān)Java FileReader讀取文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis實(shí)現(xiàn)獲取Oracle數(shù)據(jù)庫(kù)插入記錄的主鍵值
這篇文章主要為大家詳細(xì)介紹了如何利用MyBatis實(shí)現(xiàn)獲取Oracle數(shù)據(jù)庫(kù)插入記錄的主鍵值,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-08-08
Springboot MultipartFile文件上傳與下載的實(shí)現(xiàn)示例
在Spring Boot項(xiàng)目中,可以使用MultipartFile類來(lái)處理文件上傳和下載操作,本文就詳細(xì)介紹了如何使用,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
Mybatis中mapper.xml實(shí)現(xiàn)熱加載介紹
大家好,本篇文章主要講的是Mybatis中mapper.xml實(shí)現(xiàn)熱加載介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
Java如何基于okhttp請(qǐng)求SSE接口流式返回詳解
對(duì)于流式返回,Spring Boot提供了兩種不同的方式,下面這篇文章主要給大家介紹了關(guān)于Java如何基于okhttp請(qǐng)求SSE接口流式返回的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
MyBatis-Plus介紹及Spring Boot 3集成指南
本文介紹了MyBatis-Plus的基本特性及其與Spring Boot 3的集成步驟,通過(guò)使用MyBatis-Plus,開發(fā)者可以快速地搭建和開發(fā)數(shù)據(jù)訪問(wèn)層,同時(shí)提高代碼質(zhì)量和開發(fā)效率,感興趣的朋友一起看看吧2024-05-05
Spring Boot Swagger2使用方法過(guò)程解析
這篇文章主要介紹了Spring Boot Swagger2使用方法過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
IDEA插件之彩虹括號(hào)Rainbow?Brackets使用介紹
這篇文章主要為大家介紹了IDEA插件之彩虹括號(hào)Rainbow?Brackets使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03

