当前位置: 首页 > news >正文

javaIO流05:FileReader和Filewriter

FileReader

FileReader是字符流,按照字符来操作io

  1. FileReader的关系继承图

在这里插入图片描述
2. FileReader 相关方法

  • new FileReader(File/String)
  • read():每次读取单个字符,然后返回该字符,如果到文件末尾返回-1
  • read(chat[] ):批量读取多个字符到数组中,返回读取到的字符数,如果到文件末尾返回-1
  • new String(char[]):将数组char[]转换为String
  • new String(char[[],off,len):将数组char[]中从下标off开始往后数len个字符转换为String
  1. FileReader的使用案例
@Test
    public void Reader(){
        //读取的文件位置
        String filePath="D:/IOFile/news5.txt";
        FileReader fileReader=null;
          //定义一个int类型来接收read方法返回的ASCLL码
        int data = 0;
        try {
            fileReader = new FileReader(filePath);
           //read()方法读取一个字符返回一个字符,但这里的字符是以ASCLL码来表示的
            while (( data=fileReader.read())!=-1){
                //输出只需要将int类型的data转换为char
                System.out.print((char)data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Test
    public void Reader2(){
        String filePath="D:/IOFile/news5.txt";
        FileReader fileReader=null;
        int readlen = 0;
        //以数组的方式进行读取,每次读取(new char[个数])个字符
        char[] buf=new char[8];
        try {
            fileReader = new FileReader(filePath);
            while (( readlen=fileReader.read(buf))!=-1){
                System.out.println((new String(buf,0,readlen)));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Filewriter

Filewriter是字符流,按照字符来操作io

  1. Filewriter的关系继承图

在这里插入图片描述
2. Filewriter 相关方法

  • new Filewriter(File/String):会覆盖以前的内容
  • new Filewriter(File/String,true):不会覆盖以前的内容,在以前内容最后进行写入
  • write(int):写入单个字符
  • write(char[]):写入指定数组
  • write(char[],off,len):写入数组char[]中从下标off开始往后数len个字符
  • write(String):写入整个字符串
  • write(String,off,len):写入中字符串从下标off开始往后数len个字符
  • 注意
    Filewriter在使用后必须调用close()方法关闭或者flush()方法刷新,否则写入不到指定的文件中去。
  1. Filewriter的使用案例
@Test
    public void Test(){
        String fileWPath="D:/IOFile/news6.txt";
        FileWriter fileWriter =null;
         char[] cha={'a','b','c'};
        try {
            fileWriter= new FileWriter(fileWPath);
            //write(int):写入单个字符
            fileWriter.write("h");

            //write(char[]):写入指定数组
            fileWriter.write(cha);

//write(char[],off,len):写入数组char[]中从下标off开始往后数len个字符
            fileWriter.write(cha,0,2);
//write(String):写入整个字符串
            fileWriter.write("hello,world");
//write(String,off,len):写入中字符串从下标off开始往后数len个字符
           fileWriter.write("hello,world!",11,1);
            System.out.println("写入字符成功");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //为什么FileWriter使用后必须关闭或者刷新,否则写入不到指定的文件中去
                //查看close源码
                //close-->se.close-->this.implClose()-->this.writeBytes();
                // writeBytes();直到这里才是将数据写入到文件中
                // 查看flush源码
                //flush--> se.flush();-->this.implFlush();--> this.implFlushBuffer();--> this.writeBytes();
                //发现close和flush最后都要进行writeBytes方法
                //所以如果不调用close或者flush就无法执行writeBytes方法,也就无法写入数据进入文件
                
                //fileWriter.close();
                 fileWriter.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
  1. 为什么 Filewriter在使用后必须调用close()方法关闭或者flush()方法刷新

//为什么FileWriter使用后必须关闭或者刷新,否则写入不到指定的文件中去
//查看close源码
//close–>se.close–>this.implClose()–>this.writeBytes();
// writeBytes();直到这里才是将数据写入到文件中
// 查看flush源码
//flush–> se.flush();–>this.implFlush();–> this.implFlushBuffer();–> this.writeBytes();
//发现close和flush最后都要进行writeBytes方法
//所以如果不调用close或者flush就无法执行writeBytes方法,也就无法写入数据进入文件

相关文章:

  • 【PTHREAD】线程创建
  • s19.基于 Kubernetes v1.25.0(kubeadm) 和 Docker 部署高可用集群(一)
  • 力扣记录:Hot100(4)——75-101
  • 数据结构之——OJ题环形队列实现详解
  • 基于樽海鞘群算法的线性规划求解matlab程序
  • qt自定义控件之TextEdit
  • 深度估计 双目深度估计+单目深度估计 ONNX运行程序
  • Express 路由
  • 2022蓝帽杯初赛电子取证
  • 数据结构与算法复习:第三十六弹
  • CSS - 响应式布局(一)媒体查询
  • 【JAVA预备】课程目录
  • 2022年0902Maven的依赖学习<第四课>
  • Android 11 上的文件读写权限(MANAGE_EXTERNAL_STORAGE)
  • Vue模板语法(01)
  • 收藏网友的 源程序下载网
  • 【347天】每日项目总结系列085(2018.01.18)
  • CSS中外联样式表代表的含义
  • github指令
  • Java新版本的开发已正式进入轨道,版本号18.3
  • python学习笔记-类对象的信息
  • react-native 安卓真机环境搭建
  • scrapy学习之路4(itemloder的使用)
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • webpack入门学习手记(二)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 简单实现一个textarea自适应高度
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 如何胜任知名企业的商业数据分析师?
  • 线上 python http server profile 实践
  • 消息队列系列二(IOT中消息队列的应用)
  • 一道闭包题引发的思考
  • 最近的计划
  • 湖北分布式智能数据采集方法有哪些?
  • 进程与线程(三)——进程/线程间通信
  • 如何在招聘中考核.NET架构师
  • !$boo在php中什么意思,php前戏
  • # Apache SeaTunnel 究竟是什么?
  • %check_box% in rails :coditions={:has_many , :through}
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)斐波那契Fabonacci函数
  • (论文阅读40-45)图像描述1
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (算法二)滑动窗口
  • (新)网络工程师考点串讲与真题详解
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .stream().map与.stream().flatMap的使用
  • .ui文件相关
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • [CSS]CSS 字体属性
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [English]英语积累本