FileReader && FileWriter && FileInputStream && FileOutputStream

2023-05-16

目录

一、读入数据的基本操作

将day09下的hello.txt文件内容读入程序中,并输出到控制台

1.步骤:

2.完整代码 

3.异常的处理:为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理 

注意

二、对read()操作升级:使用read的重载方法

⚪步骤

 1.File类的实例化

2.FileReader流的实例化

3.读入操作

4.资源的关闭

三、FileWriter写出数据的操作

 ————从内存中写出数据到硬盘的文件里

(一)步骤

1.提供File类的对象,指明写出到的文件

2.提供FileWriter的对象,用于数据输出

3.写出的操作

4.流资源的关闭

完整代码

⚪结果:

 (二)说明

⚪输出操作对应的File可以不存在,并不会报异常

四、使用FileReader和FileWriter实现文本文件的复制

五、图片文件的处理

1.字符流能否处理图片文件

2.需要用到字节流来处理图片文件

六、FileInputStream和FileOutputStream的使用

(一)使用字节流FileInputStream处理文本文件

⚪结论

(二)使用字节流处理非文本文件——实现对图片的复制

 七、指定路径下文件的复制的方法

1.方法

2.视频的复制

 耗费的时间:

运行结果 


一、读入数据的基本操作

将day09下的hello.txt文件内容读入程序中,并输出到控制台

1.步骤:

①.实例化File类的对象,指明要操作的文件

②.提供具体的流

③.数据的读入

read():返回读入的一个字符。如果达到文件末尾,返回-1

        int data = fr.read();
        while (data != -1){
            System.out.println((char)data);
            data = fr.read();
        }

④.流的关闭操作

 

2.完整代码 

public class FileReaderWriterTest {
    public static void main(String[] args) {
        File file = new File("hello.txt"); //相较于当前工程
        System.out.println(file.getAbsoluteFile());  //E:\BaiduNetdiskDownload\zzzzzzzz\hello.txt

        File file1 = new File("day09\\hello.txt");
        System.out.println(file1.getAbsoluteFile());
    }
    @Test
    public void test1() throws IOException {
        //1.实例化File类的对象,指明要操作的文件
        File file = new File("hello.txt");//相较于当前module下的相对路径
        //2.提供具体的流
        FileReader fr = new FileReader(file);
        //3.数据的读入
        //read():返回读入的一个字符。如果达到文件末尾,返回-1
        int data = fr.read();
        while (data != -1){
            System.out.println((char)data);
            data = fr.read();
        }
        //4.流的关闭操作
        fr.close();
    }
}

 

3.异常的处理:为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理 

    @Test
    public void test1() {
        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.println((char) data);
                data = fr.read();
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.流的关闭操作
            try {
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

注意

读入的对象一定要存在,否则就会报错:FileNotFoundException

二、对read()操作升级:使用read的重载方法

⚪步骤

 1.File类的实例化

2.FileReader流的实例化

3.读入操作

 

read(char[ ] cbuf):返回每次读入cbuf数组中的字符个数。如果达到文件末尾,返回-1

            char[] cbuf = new char[5];
            int read;
            while((read = fr.read(cbuf)) != -1){
                //方式1
//                //错误写法
                for (int i = 0; i < cbuf.length; i++) {
                    System.out.print(cbuf[i]); //helloworld123ld
                }
//                //正确写法
//                for (int i = 0; i < read; i++) {
//                    System.out.print(cbuf[i]);
//                }
                //方式2
                //错误写法,对应方式1的错误写法
//                String str = new String(cbuf);
//                System.out.print(str);  //helloworld123ld
                //正确写法
                String str = new String(cbuf,0,read);
                System.out.print(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fr != null){
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

4.资源的关闭

三、FileWriter写出数据的操作

 ————从内存中写出数据到硬盘的文件里

(一)步骤

1.提供File类的对象,指明写出到的文件

2.提供FileWriter的对象,用于数据输出

 

3.写出的操作

        fw.write("I have a dream!\n");   // \n用于换行
        fw.write("you need to have a dream!");

4.流资源的关闭

        //4.流资源的关闭
        fw.close();

完整代码

    @Test
    public void testFileWriter() throws IOException {
        //1.提供File类的对象,指明写出到的文件
        File file = new File("hello.txt");
        //2.提供FileWriter的对象,用于数据输出
        FileWriter fw = new FileWriter(file);
        //3.写出的操作
        fw.write("I have a dream!\n");   // \n用于换行
        fw.write("you need to have a dream!");
        //4.流资源的关闭
        fw.close();
    }

⚪结果:

 (二)说明

⚪输出操作对应的File可以不存在,并不会报异常

如果不存在:在输出的过程中,会自动创建此文件;

如果存在

     如果流使用的构造器是:FileWriter(file,false) /  FileWriter(file):对原有文件覆盖

     如果流使用的构造器是:FileWriter(file,true):不会对原有文件覆盖,而是在原有文件基础上追加内容

四、使用FileReader和FileWriter实现文本文件的复制

    @Test
    public void testFileWriterFileWriter() {
        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;//记录每次读入到cbuf数组中的字符个数
            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();
            }
        }
    }

五、图片文件的处理

1.字符流能否处理图片文件

不能

2.需要用到字节流来处理图片文件

FileInputStream  FileOutputStream

六、FileInputStream和FileOutputStream的使用

使用字节流FileInputStream处理文本文件可能出现乱码

(一)使用字节流FileInputStream处理文本文件

    @Test
    public void test1() {
        FileInputStream fis = null;
        try {
            //1.造文件
            File file = new File("hello.txt");
            //2.造流
            fis = new FileInputStream(file);
            //3.读数据
            byte[] buffer = new byte[5];
            int len; //记录每次读取的字节的个数
            while ((len = fis.read(buffer)) != -1){
                String str = new String(buffer,0,len);
                System.out.print(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fis != null){
                //4.关闭资源
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

⚪结论

1.对于文本文件(.txt,.java,.c,.cpp),使用字符流进行处理

2.对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt等),使用字节流进行处理

(二)使用字节流处理非文本文件——实现对图片的复制

    @Test
    public void test2() {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            File srcFile = new File("1515050201.jpg");
            File destFile = new File("1515050201(2).jpg");
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);
            //复制的过程
            byte[] buffer = new byte[5];
            int len;
            while ((len = fis.read(buffer)) != -1){
                fos.write(buffer,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fis != null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

复制成功!!! 

 七、指定路径下文件的复制的方法

1.方法

    public void copyFile(String srcPath,String destPath){
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            File srcFile = new File(srcPath);
            File destFile = new File(destPath);
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);
            //复制的过程
            byte[] buffer = new byte[1024];  //2^10
            int len;
            while ((len = fis.read(buffer)) != -1){
                fos.write(buffer,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fis != null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

2.视频的复制

    @Test
    public void testCopyFile(){
        long start = System.currentTimeMillis();
        String srcPath = "C:\\Users\\Lenovo\\Desktop\\软件2005班张兰.mp4";
        String destPath = "C:\\Users\\Lenovo\\Desktop\\软件2005班张兰02.mp4";
        copyFile(srcPath,destPath);
        long end = System.currentTimeMillis();

        System.out.println("复制操作花费的时间为:" + (end-start));
    }

 耗费的时间:

运行结果 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FileReader && FileWriter && FileInputStream && FileOutputStream 的相关文章

随机推荐

  • 约瑟夫环总结

    约瑟夫环 N个人围成一圈 xff0c 从第一个人开始报数 xff0c 报到m的人出圈 xff0c 剩下的人继续从1开始报数 xff0c 报到m的人出圈 xff0c 如此往复 问题一 xff1a 所有人都出圈 xff0c 求出圈的人的编号顺序
  • Linux操作系统实验:生产者和消费者问题

    一 实验目的及要求 生产者消费者 问题是一个著名的同时性编程问题的集合 通过编写经典的 生产者消费者 问题的实验 xff0c 读者可以进一步熟悉 Linux 中多线程编程 xff0c 并且掌握用信号量处理线程间的同步互斥问题 二 实验仪器设
  • COCO数据集解析

    1 简介 官方网站 xff1a http cocodataset org 全称 xff1a Microsoft Common Objects in Context xff08 MS COCO xff09 支持任务 xff1a Detecti
  • U盘启动盘cmd制作

    U盘 移动硬盘启动盘cmd手工制作 插入 gt 61 8G的u盘 移动硬盘 1 win 43 r打开运行窗口 xff0c 输入cmd回车打开命令行 xff08 命令提示符不分大小写 xff09 2 在DOS命令行窗口中输入 diskpart
  • 系统调用的概念和作用

    一 什么是系统调用 xff0c 有何作用 1 概念 用户接口 命令接口 允许用户直接使用 程序接口 允许用户通过程序间接使用 xff1a 由一组系统调用组成 系统调用 系统调用 是操作系统提供给应用程序 xff08 程序员 编程人员 xff
  • linux系统下键盘按键的重新映射——xmodmap工具和xev工具

    虽然linux下小键盘还是不能用 xff0c 但是找到一篇好文章 linux系统下键盘按键的重新映射 xmodmap工具和xev工具 文章目录 1 xev工具 xff1a 2 xmodmap工具 大家会不会有时候 xff0c 感觉键盘上的某
  • Sorry, you have been blocked(Chatgpt登录被屏蔽)

    解决办法 xff1a 关闭浏览器 xff0c 重新打开 vpn换个地区 xff0c 换个美国的vpn
  • Linux查看ip地址出错,ens33不显示inet解决

    在我的私人博客中也有写 xff0c 大家去看看哦 Linux 查看 ip 地址出错 xff0c ens33 不显示 inet 解决 白都 baidu2001 top 问题 xff1a 在 CentOS7中输入 ip addr 时 xff0c
  • Java多线程(超详解)

    目录 1 线程简介 1 1 程序 1 2 进程 1 3 线程 1 4 多线程 1 5 普通方法调用和多线程 2 线程创建 2 1 继承Thread类 2 2 实现Runnable接口 2 3 实现Callable接口 xff08 了解 xf
  • 学习Java的路线

    JavaSE 18 20天 xff09 数据库 xff08 4天 xff09 前端 xff08 7天 xff09 Javaweb xff08 7天 xff09 SSM框架 xff08 9天 xff09 Linux xff08 7天 xff0
  • Java常用类的使用方法小结

    文章目录 前言一 常用类有哪些 xff1f 二 常用类使用方法1 Object类0 xff09 所用的对象1 xff09 getClass方法2 xff09 hasCode方法3 xff09 toString方法4 xff09 equals
  • Java I/O流

    文章目录 前言一 什么是流 xff1f 二 流的分类1 根据流向来分1 xff09 输入流2 xff09 输出流 2 根据单位来分1 xff09 字节流2 xff09 字符流 3 根据功能来分1 xff09 节点流2 xff09 过滤流 三
  • Java 网络编程

    文章目录 前言一 什么是计算机网络 xff1f 二 网络通信的两个重要因素1 通讯双方的地址1 xff09 ip2 xff09 端口号 2 规则 xff1a 网络协议 三 Ip地址1 InetAddress2 Ip的分类1 xff09 ip
  • ScrumMaster的教练职责

    ScrumMaster是Scrum团队的敏捷教练 Ken Rubin说 xff0c 类似于运动团队的教练 xff0c ScrumMaster观察团队使用Scrum的过程 xff0c 帮助团队提高工作绩效 教练不是顾问 xff0c 不提供解决
  • Java多线程

    文章目录 前言一 多线程1 进程 xff0c 线程 xff0c 多线程2 继承Thread类1 xff09 同时下载多个网图通过继承Thread类 3 实现Runnable接口1 xff09 下载多个网图通过实现Runnable接口2 xf
  • MySQL数据库随笔

    提示 xff1a 本文章仅供个人学习使用 xff0c 如有错误请及时私信通知 文章目录 前言一 MySQL的基本操作命令 xff08 1 xff09 连接数据库 xff08 2 xff09 修改用户密码 xff08 3 xff09 刷新权限
  • mybiatis学习笔记

    mybiatis学习笔记参考于尚硅谷mybatis文档 96 提示 xff1a 这如果有错误的地方 xff0c 请联系博主已更正 xff0c 文章目录 mybiatis学习笔记参考于尚硅谷mybatis文档前言一 Mybatits的特性二
  • KVM 介绍及安装

    KVM 安装 KVM KVM 简介 KVM 全称是 Kernel based Virtual Machine 是 Linux 下 x86 硬件平台上的全功能虚拟化解决方案 xff0c 包含一个可加载的内核模块 kvm ko 提供和虚拟化核心
  • 接口(interface)

    目录 一 简介 二 接口的使用 使用interface来定义 在Java中 xff0c 接口和类是两个并列的结构 如何定义接口 xff1a 定义接口中的成员 JDK7以及以前 xff1a 只能定义全局常量和抽象方法 JDK8中 xff1a
  • FileReader && FileWriter && FileInputStream && FileOutputStream

    目录 一 读入数据的基本操作 将day09下的hello txt文件内容读入程序中 xff0c 并输出到控制台 1 步骤 xff1a 2 完整代码 3 异常的处理 xff1a 为了保证流资源一定可以执行关闭操作 xff0c 需要使用try