FileReader和FileWriter流

简介: FileReader和FileWriter流

总结于尚硅谷学习视频

一、流的分类

  • 1.操作数据单位:字节流、字符流
  • 2.数据的流向:输入流、输出流
  • 3.流的角色:节点流、处理流

二、流的体系结构

抽象基类 节点流(文件流) 缓冲流 (处理流的一种)
InputStream FileInputStream (read(byte[] buffer) BufferedInputStream (read(byte[] buffer)
OutputStream FileOutputStream (write(byte[] buffer,0,len) BufferedOutputStream (write(byte[] buffer,0,len) / flush()
Reader FileReader (read(char[] cbuf) BufferedReader (read(char[] cbuf) / readLine()
Writer FileWriter (write(char[] cbuf,0,len) BufferedWriter (write(char[] cbuf,0,len) / flush()



三、一般步骤

 1.实例化File类的对象,指明要操作的文件
 2.提供具体的流
 3.数据的读入
 4.流的关闭操作

四、代码

FileReaderWriterTest类

package com.day0315_2;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
 * 一、流的分类
 * 1.操作数据单位:字节流、字符流
 * 2.数据的流向:输入流、输出流
 * 3.流的角色:节点流、处理流
 *
 * 二、流的体系结构
 * 抽象基类               节点流(文件流)                                          缓冲流(处理流的一种)
 * InputStream          FileInputStream (read(byte[] buffer)                BufferedInputStream (read(byte[] buffer)
 * OutputStream         FileOutputStream (write(byte[] buffer,0,len)        BufferedOutputStream (write(byte[] buffer,0,len) / flush()
 * Reader               FileReader (read(char[] cbuf)                       BufferedReader (read(char[] cbuf)  / readLine()
 * Writer               FileWriter (write(char[] cbuf,0,len)                BufferedWriter (write(char[] cbuf,0,len) / flush()
 *
 *
 *
 *
 *
 */
public class FileReaderWriterTest {
    public static void main(String[] args) {
        File file =new File("hello.txt");//相较于当前工程
        System.out.println(file.getAbsoluteFile());
    }
    /*
    将hello.txt文件内容读到程序里面,并输入到控制台
    说明点:
    1.read()的理解:返回读入的一个字符。如果达到文件末尾,返回-1
    2.异常的处理:为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理
    3.读入的文件一定要存在,否则就会报FileNotFoundException。
     */
    @Test
    public void testFileReader() {
        FileReader fr= null;
        try {
            //1.实例化File类的对象,指明要操作的文件
            File file =new File("hello.txt");//相较于当前Module
            //2.提供具体的流
            fr = new FileReader(file);
            //3.数据的读入
            //read():返回读入的一个字符。如果达到文件末尾,返回-1
            //方式一
//        int data = fr.read();
//        while(data!=-1){
//            System.out.print((char)data);
//            data = fr.read();
//        }
            //方式二:语法修改
            int data;
            while((data= fr.read())!=-1){
                System.out.println(data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //4.流的关闭操作
            try {
                if (fr!=null) {
                    fr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //对read()操作升级:使用read的重载方法
    @Test
    public void testFileReader1(){
        FileReader fr= null;
        try {
            //1.File类的实例化
            File file =new File("hello.txt");
            //2.FileReader流的实例化
            fr = new FileReader(file);
            //3.读入的操作
            //read(char[] cbuf)返回每次读入到字符中的个数,如果达到文件末尾,返回-1
            char[] cbuf=new char[5];
            int len;
            while ((len=fr.read(cbuf))!=-1){
                //方式一
                //错误的helloWorld123ld覆盖之前的数组
//                for (int i=0;i<cbuf.length;i++){
//                    System.out.print(cbuf[i]);
//                }
                //正确的helloWorld123
                for (int i=0;i<len;i++){
                    System.out.print(cbuf[i]);
                }
                //方式二
                //错误的helloWorld123ld
//                String str=new String(cbuf);
//                System.out.println(cbuf);
//                //正确的
//                String str=new String(cbuf,0,len);
//                System.out.print(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fr!=null)
            //4.资源的关闭
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
    /*
    从内存中写出数据到硬盘里的文件
    说明
    1.输出操作,对应的File可以不存在的。并不报异常。
    2.
            File对应的硬盘中的文件如果不存在,在输入过程中,会自动创建此文件
            File对应的硬盘中的文件如果存在:
                如果流使用的构造器是:FileWriter(file,false)/FileWriter(file):对原有文件的覆盖
                如果流使用的构造器是:FileWriter(file,true):对原有文件进行追加
     */
    @Test
    public void testFileWrite() {
        FileWriter fw = null;
        try {
            //1.提供FIle类的对象,指明写出的文件
            File file=new File("hello1.txt");
            //2.提供FileWriter的对象,用于数据的写入
            fw = new FileWriter(file,false);
            //3.写出的操作
            fw.write("I have a dream!\n");
            fw.write("you need to have a dream!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fw!=null)
                try {
                    //4.流资源的关闭
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
    //文件复制,不能处理图片文件
    //不能使用字符流来处理字节流
    @Test
    public void testFileReaderFileWriter(){
        FileReader fr = null;
        FileWriter fw = null;
        try {
            //1.创建File类的对象,指明读入和写出的文件
            File srcFile=new File("hello.txt");
            File destFile=new File("hello2.txt");
            //2.创建输入流和输出流的对象
            fr = new FileReader(srcFile);
            fw = new FileWriter(destFile);
            //3.数据的读入和写出操作
            char [] cbuf=new char[5];
            int len;
            while((len=fr.read(cbuf))!=-1){
                //每次写出len个字符
                fw.write(cbuf,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.关闭流资源
                try {
                    if (fw!=null)
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if(fr!=null)
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
}
相关文章
|
资源调度 前端开发 测试技术
前端工程化实践:从零搭建现代化项目构建流程
【4月更文挑战第6天】本文介绍了前端工程化的概念和重要性,包括模块化、自动化、规范化和CI/CD。接着,讨论了选择合适的工具链,如包管理器、构建工具和测试框架。然后,详细阐述了如何从零开始搭建一个基于React的现代化项目构建流程,涉及初始化、代码规范、测试、CSS处理、代码分割和CI/CD配置。最后,提到了持续优化与迭代的方向,如性能优化、类型检查和微前端。通过这样的实践,开发者可以提升开发效率和代码质量,为项目长远发展奠定基础。
1128 0
|
10月前
|
SQL HIVE
十一、Hive JOIN 连接查询
在 Hive 的世界里,JOIN 就像是数据间的红线,把原本分散在各自表里的信息串联起来。无论是内连接、外连接,还是 Hive 特有的左半连接,都各有“武功招式”,适用于不同场景。
545 12
|
10月前
|
存储 弹性计算 缓存
阿里云服务器u2a和u1实例怎么选?性能价格和适用场景对比,选型对比参考
在阿里云服务器的实例规格中,前期推出的通用算力型u1实例广受企业青睐,尤其是阿里云推出的u1实例2核4G5M带宽仅需199元,深受广大初创企业用户喜欢。在此基础上,全新推出的u2a实例算力性能超u1实例40%,性能更好。对于用户来说,更为关心的是通用算力型u2a实例与u1实例相比,有什么不同,性能上有哪些提升?本文将从性能、适用场景、收费标准等多个角度对比通用算力型u2a实例与u1实例,以供大家了解他们之间的区别,从而做出选择参考。
|
11月前
|
缓存 数据安全/隐私保护 芯片
中控网 item_search - 根据关键词获取公司列表接口对接全攻略:从入门到精通
中控网item_search接口支持通过关键词批量检索企业信息,涵盖行业、地域、资质等维度,适用于供应商挖掘、市场调研等场景。本攻略详解接口调用、签名生成、分页获取及优化策略,助力开发者高效对接,快速实现精准企业数据采集与应用。
|
10月前
|
机器学习/深度学习 算法
费曼学习法:为什么你应该通过写博客来掌握任何知识
你是否学完就忘?诺贝尔奖得主费曼提出:若无法简单解释,便是未真正理解。其学习法四步——学习、教授、反思、简化——结合写博客,能深度巩固知识。写作倒逼思维清晰,暴露理解盲区,构建个人知识库。无需完美,从“初学者视角”出发,边学边写,用输出驱动输入。写博客不仅是记录,更是成为专家的路径。开始吧,让文字见证你的深度学习之旅。
827 163
费曼学习法:为什么你应该通过写博客来掌握任何知识
|
人工智能 前端开发 JavaScript
详解智能编码在前端研发的创新应用
接下来,人与智能体的交互将变得更为紧密,比如 N 年以后是否可以逐渐过渡。这个逐渐过渡的过程实际上是温和的,从依赖人类到依赖超大规模算力的转变,可能会取代我们的一些职责。这不仅仅是简单的叠加关系。对于AI和超大规模算力,这是否意味着我们可以大幅度提升软件质量,是否可以缩短研发周期并提高效率,还有创造出更优质的软件并持续发展,这无疑是肯定的。
1165 25
|
11月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle数据库的PL/SQL编程语言
PL/SQL是Oracle对SQL的扩展,结合过程化编程特性,支持开发存储过程、函数和触发器。本文介绍其基本结构,并演示如何在SQL*Plus中编写“Hello World”程序,需启用serveroutput输出。也可使用Oracle SQL Developer更高效地开发调试PL/SQL应用。
283 3
|
10月前
|
边缘计算 运维 监控
边缘计算场景实践
《边缘计算场景实践指南》系统阐述了边缘计算在5G、物联网与AI背景下的应用路径。涵盖云边端协同架构、ENS核心产品、CDN、视频分析与物联网等典型场景,详解部署流程、网络优化、安全防护与监控体系,并结合智慧工厂案例与成本分析,展望5G+边缘计算融合趋势,为企业落地边缘计算提供全面参考。(238字)
605 0
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
935 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
10月前
|
机器学习/深度学习 监控 安全
基于开源计算机视觉的餐饮场景智能化监控方案实践与实现
本文介绍一套可本地部署的餐饮视觉管理系统,基于YOLO、DeepSORT等模型实现客流统计、桌面识别、后厨安全监测、热力图分析与异常行为预警,支持低算力设备部署,模块化设计适配多场景,数据全本地化,保障隐私安全。
835 0