「Java中的FileReader:读取文件更简单」

哈喽,各位小伙伴们好,我是喵手。

今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流学习,互相学习,才能成长的更快,对吧。

我是一名java开发,所以日常接触到最多的就是java啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!

前言

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

摘要

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

正文

创建FileReader对象

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

java 复制代码
FileReader reader = new FileReader("path/to/file");

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

读取文件

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

java 复制代码
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流之后,我们需要关闭流以释放系统资源。关闭流的方法如下:

java 复制代码
reader.close();

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

读取文件的注意事项

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

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

示例代码

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

java 复制代码
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类的基本功能。

java 复制代码
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类的使用方法。

... ...

最后

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

相关推荐
武昌库里写JAVA7 分钟前
Java 设计模式在 Spring 框架中的实践:工厂模式与单例模式
java·vue.js·spring boot·sql·学习
每天进步一点_JL18 分钟前
深入理解 volatile
后端
李慕婉学姐26 分钟前
【开题答辩过程】以《基于SpringBoot+Vue的扶贫助农平台的设计与实现》为例,不会开题答辩的可以进来看看
vue.js·spring boot·后端
麦兜*27 分钟前
Redis高可用架构设计:主从复制、哨兵、Cluster集群模式深度对比
java·数据库·spring boot·redis·spring·spring cloud·缓存
王嘉俊92528 分钟前
Redis 入门:高效缓存与数据存储的利器
java·数据库·redis·后端·spring·缓存·springboot
王维31 分钟前
【shardingsphere-jdbc】分表实践
java·数据库
aricvvang37 分钟前
一行 Promise.all 争议:数据库查询并行真的没用?我和同事吵赢了!!!
javascript·后端·node.js
文心快码BaiduComate1 小时前
Comate分饰多角:全栈开发一个Python学习网站
前端·后端·python
道可到1 小时前
淘宝面试原题 Java 面试通关笔记 02|从编译到运行——Java 背后的计算模型(面试可复述版)
java·后端·面试
DKPT1 小时前
JVM如何管理直接内存?
java·笔记·学习