Java使用FileReader读取文件详解

 更新时间:2023年09月13日 11:41:58   作者:喵手  
本文将为大家介绍FileReader类的基本用法,包括如何创建FileReader对象,如何读取文件,以及如何关闭流,感兴趣的小伙伴可以跟随小编一起了解一下

前言

在Java编程中,经常需要读取文件的内容,这时我们需要使用FileReader类。FileReader是Java IO库中的一个用于读取字符流的类,它继承自InputStreamReader。

摘要

本文将介绍FileReader类的基本用法,包括如何创建FileReader对象,如何读取文件,以及如何关闭流。文章将通过示例演示FileReader类的使用,在代码中将有详细的注释说明,方便读者理解。

正文

创建FileReader对象

在使用FileReader类读取文件之前,我们需要先创建FileReader对象。创建FileReader对象的方法如下:

FileReader reader = new FileReader("path/to/file");

这里的"path/to/file"是文件的路径,可以是相对路径或绝对路径。如果文件路径不正确或文件不存在,将会抛出FileNotFoundException异常。

读取文件

FileReader类提供了多种方法用于读取文件,其中最常用的方法是read()。read()方法可以读取一个字符。示例代码如下:

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();
}

上面的代码中,将会逐个字符读取文件并打印出来。在读取文件时,read()方法返回的是字符的ASCII码。如果已经到达文件的末尾,read()方法将会返回-1。

除了read()方法之外,FileReader类还提供了其他多种方法用于读取文件,如read(char[] cbuf)、read(char[] cbuf, int off, int len)等。这些方法可以一次性读取多个字符。

关闭流

在使用完FileReader流之后,我们需要关闭流以释放系统资源。关闭流的方法如下:

reader.close();

关闭流之后,将无法再从流中读取数据。

读取文件的注意事项

使用FileReader时,需要注意以下几点:

  • 需要手动关闭FileReader对象,否则会占用过多的系统资源。
  • FileReader类默认使用系统默认编码来读取文件,如果文件的编码格式不是默认编码格式,可能会导致读取到的数据出现乱码。
  • 如果要读取比较大的文件,建议使用BufferedReader进行缓存,加快读取速度。

示例代码

下面是一个完整的示例代码,其中实现了读取文件、关闭流等功能。

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();
        }
    }
}

示例代码执行结果如下:

读取文件截图如下:

方法介绍

方法描述
public FileReader(String fileName) throws FileNotFoundException创建FileReader对象
public int read() throws IOException读取一个字符
public int read(char[] cbuf) throws IOException读取多个字符到缓冲区
public int read(char[] cbuf, int off, int len) throws IOException读取多个字符到缓冲区,从指定的偏移量开始
public void close() throws IOException关闭流

测试用例

我们可以编写一些简单的测试用例,测试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');
    }
}

执行结果如下:

全文小结

本文主要介绍了Java中的FileReader类,包括如何创建FileReader对象、如何读取文件以及如何关闭流等内容。通过示例代码,我们可以更好地理解FileReader类的使用方法。

到此这篇关于Java使用FileReader读取文件详解的文章就介绍到这了,更多相关Java FileReader读取文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis实现获取Oracle数据库插入记录的主键值

    MyBatis实现获取Oracle数据库插入记录的主键值

    这篇文章主要为大家详细介绍了如何利用MyBatis实现获取Oracle数据库插入记录的主键值,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-08-08
  • Springboot MultipartFile文件上传与下载的实现示例

    Springboot MultipartFile文件上传与下载的实现示例

    在Spring Boot项目中,可以使用MultipartFile类来处理文件上传和下载操作,本文就详细介绍了如何使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Mybatis中mapper.xml实现热加载介绍

    Mybatis中mapper.xml实现热加载介绍

    大家好,本篇文章主要讲的是Mybatis中mapper.xml实现热加载介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 一文详解Java闭锁和栅栏的实现

    一文详解Java闭锁和栅栏的实现

    闭锁与栅栏是在多线程编程中的概念,因为在多线程中,我们不能控制线程的执行状态,所以给线程加锁,让其按照我们的想法有秩序的执行。本文将详解Java闭锁和栅栏的实现,需要的可以参考一下
    2022-06-06
  • Java如何基于okhttp请求SSE接口流式返回详解

    Java如何基于okhttp请求SSE接口流式返回详解

    对于流式返回,Spring Boot提供了两种不同的方式,下面这篇文章主要给大家介绍了关于Java如何基于okhttp请求SSE接口流式返回的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Java集合框架之LinkedHashSet类解读

    Java集合框架之LinkedHashSet类解读

    这篇文章主要介绍了Java集合框架之LinkedHashSet类解读,LinkedHashSet是HashSet的有序版本,它跨所有元素维护一个双向链接的List,当需要维护迭代顺序时,就使用这个类,当遍历HashSet时,顺序是不可预测的,需要的朋友可以参考下
    2023-09-09
  • Java信号量全解析

    Java信号量全解析

    这篇文章主要介绍了Java信号量的相关资料,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-01-01
  • MyBatis-Plus介绍及Spring Boot 3集成指南

    MyBatis-Plus介绍及Spring Boot 3集成指南

    本文介绍了MyBatis-Plus的基本特性及其与Spring Boot 3的集成步骤,通过使用MyBatis-Plus,开发者可以快速地搭建和开发数据访问层,同时提高代码质量和开发效率,感兴趣的朋友一起看看吧
    2024-05-05
  • Spring Boot Swagger2使用方法过程解析

    Spring Boot Swagger2使用方法过程解析

    这篇文章主要介绍了Spring Boot Swagger2使用方法过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • IDEA插件之彩虹括号Rainbow Brackets使用介绍

    IDEA插件之彩虹括号Rainbow Brackets使用介绍

    这篇文章主要为大家介绍了IDEA插件之彩虹括号Rainbow Brackets使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论