• 掌握Java中的FileReader类


    在这里插入图片描述

      咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


    🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

    环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
    
    • 1

    前言

      Java是一种面向对象的程序设计语言,由Sun Microsystems公司于1995年首次公开发布。Java与C++语言相比,更强调面向对象的概念,更容易学习和使用,且不易出错,被广泛应用于互联网应用、客户端软件、移动应用等领域。Java的标准库中包含了许多常用的类,其中FileReader就是一个常用的类。

    摘要

      FileReader类是Java.io包中的一个类,用来读取文件中的字符数据,它继承了InputStreamReader类。使用FileReader类可以很方便地读取文本文件中的数据,是一种字符输入流。

    FileReader

    概述

      FileReader类是Java.io包中的一个类,用来读取文件中的字符数据,它继承了InputStreamReader类,InputStreamReader类又继承自Reader类。所以,FileReader类的完整继承关系图如下所示:

            java.lang.Object
                    |
            java.io.Reader
                    |
            java.io.InputStreamReader
                    |
            java.io.FileReader
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

      在这个继承关系图中,FileReader类位于最底层,它是Reader类的子类,而Reader类又是InputStreamReader类的子类,最终都继承自Object类。这表示FileReader类拥有Reader类和InputStreamReader类中定义的方法,并且间接继承了Object类中的方法。

      对于FileReader类,它的构造方法有两种:

    public FileReader(String fileName) throws FileNotFoundExceptionpublic FileReader(File file) throws FileNotFoundException
    
    • 1
    • 2

      第一种方法通过接受一个文件名字符串来创建一个FileReader对象。第二种方法通过接受一个File对象来创建一个FileReader对象。

      FileReader类有一个read()方法来读取字符,read()方法会返回读取到的字符编码,如果已经到达文件末尾,返回-1。同时FileReader还有个read(char[] cbuf)方法,这个方法会读取长度为cbuf.length的字符到cbuf中,并返回读取的字符个数。

    源代码解析

      FileReader类是Java中用于读取字符流的类,它继承自Reader类。FileReader类的源代码如下:

    public class FileReader extends InputStreamReader {
        
        public FileReader(String fileName) throws FileNotFoundException {
            super(new FileInputStream(fileName));
        }
        
        public FileReader(File file) throws FileNotFoundException {
            super(new FileInputStream(file));
        }
    
        public FileReader(FileDescriptor fd) {
            super(new FileInputStream(fd));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    从源代码可以看出,FileReader类有三个构造方法:

    1. FileReader(String fileName):根据文件名创建FileReader对象。
    2. FileReader(File file):根据File对象创建FileReader对象。
    3. FileReader(FileDescriptor fd):根据文件描述符创建FileReader对象。

      这三个构造方法都使用了FileInputStream类来创建输入流,因为FileReader类是用来读取字符流的,而FileInputStream是用来读取字节流的,所以需要使用InputStreamReader类将FileInputStream转换为字符流,InputStreamReaderReader类的子类,因此FileReader类也是Reader类的子类。

      除了构造方法外,FileReader类还继承了Reader类的所有方法,例如read()skip()close()等。因此,我们可以使用FileReader类的实例对象来读取文件中的字符串。

    部分源码截图如下:

    在这里插入图片描述

    应用场景案例

      FileReader类通常用于读取文本文件的内容。例如,在Java应用程序中可以用FileReader类来读取配置文件、日志文件等文本文件的内容,然后做进一步的处理,例如解析XML文件、处理JSON格式的数据等。

    优缺点分析

    优点:

    • FileReader类是Java标准库中提供的类,使用方便。
    • FileReader类可以很方便地读取文本文件中的数据。

    缺点:

    • FileReader类只能用于读取文本文件,不能用于读取二进制文件。
    • FileReader类在读取文件时,文件必须存在,否则会抛出FileNotFoundException异常。

    类代码方法介绍

    构造方法

    public FileReader(String fileName) throws FileNotFoundExceptionpublic FileReader(File file) throws FileNotFoundException
    
    • 1
    • 2

      这两个构造方法分别通过接受一个文件名字符串或一个File对象来创建一个FileReader对象。

    常用方法

    public int read() throws IOExceptionpublic int read(char[] cbuf) throws IOExceptionpublic void close() throws IOException
    • 1
    • 2
    • 3

      FileReader类中最常用的方法是·read()·,它用来读取字符,返回读取到的字符编码,如果已经到达文件末尾,返回-1。例如:

    FileReader reader = new FileReader("test.txt");
    int c = reader.read();
    
    • 1
    • 2

      read(char[] cbuf)方法会读取长度为cbuf.length的字符到cbuf中,并返回读取的字符个数。

      close()方法用来关闭打开的文件。因为操作系统通常限制了同时打开的文件数量,所以在完成对文件的操作后应该及时关闭文件。

    测试用例

    为了演示FileReader类的使用方法,这里提供一个简单的测试用例,供大家参考学习。

    示例代码

    package com.example.javase.io.reader.inputStreamReader.fileReader;
    
    import java.io.FileReader;
    import java.io.IOException;
    
    /**
     * @author bug菌
     * @version 1.0
     * @date 2023/10/19 10:37
     */
    public class FileReaderTest {
        public static void main(String[] args) {
            try (FileReader reader = new FileReader("./template/fileTest.txt")) {
                char[] buffer = new char[1024];
                int length;
                while ((length = reader.read(buffer)) != -1) {
                    System.out.println(new String(buffer, 0, length));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

      这个例子中,使用try-with-resources语句块来自动关闭文件,也可以使用try-catch-finally语句块来手动关闭文件。

    示例结果

    如下是通过上述测试用例所运行的示例结果,仅供参考:

    在这里插入图片描述

    代码解析

      如上测试用例展示了如何使用FileReader类进行文件读取内容操作,如下给大家具体讲解该测试用例实现的完整步骤,同学们请看:

      首先,在try块中声明了一个FileReader对象,并传入了要读取的文件的路径。try块的结尾处,Java会自动关闭reader对象。

      接下来,定义了一个字符数组buffer,大小为1024,用于存储读取到的数据。然后,使用while循环,从reader中读取内容,并将读取到的数据存入buffer中。如果读取的长度为-1,表示已经读取到文件末尾,循环结束。

      最后,使用System.out.println语句将读取到的字符数组转换成字符串,并输出到控制台。如果读取到的内容包含中文或其他非ASCII字符,一定要使用带有字符编码参数的String构造函数,否则会出现乱码。

    小结

      本文介绍了Java.io包中的FileReader类,包括FileReader类的构造方法、常用方法、应用场景、优缺点等内容,并提供了一个简单的测试用例。学习本文后,读者可以掌握如何使用FileReader类读取文本文件中的内容。

    附录源码

      如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

    总结

      FileReader类是Java标准库中的一个类,用于读取文本文件中的数据。使用FileReader类可以很方便地读取文本文件中的内容,是一种字符输入流。本文介绍了FileReader类的构造方法、常用方法、应用场景、优缺点等内容,并提供了一个简单的测试用例,希望能帮助读者更好地理解和使用FileReader类。

    ☀️建议/推荐你


      无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

      最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

      同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

    📣关于我

      我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


  • 相关阅读:
    实验三十四、串联型稳压电路参数的选择
    2022绵阳+dp经典问题
    MySQL慢查询日志:如何定位执行慢的sql语句
    atoi函数的模拟实现
    Python JSON
    Flask 入门
    TSDB - VictoriaMetrics 技术原理浅析
    PCB元件创建
    15. Canvas 和 SVG 的区别?
    Vue-引入ElementUI&&use底层原理
  • 原文地址:https://blog.csdn.net/weixin_43970743/article/details/136612436