文件字节流输出、文件复制、关闭流的方法

IO流

字节流

文件字节输出流

一般用与源文件路径接通

java 复制代码
package com.itheima.fileoutputstream;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;

public class FileOutputStreamDemo1 {
    public static void main(String[] args) throws Exception {
        //目标:学会使用文件字节流输出
        //1.创建文件字节输出流管道与目标文件接通
        //OutputStream fos = new FileOutputStream("day03-file-io\\src\\lll05");//多态  写数据到文件它会自动创建,不需要事先创建。 覆盖管道
        OutputStream fos = new FileOutputStream("day03-file-io\\src\\lll05",true);//多态  写数据到文件它会自动创建,不需要事先创建。 追加管道

        //2、写入数据
        fos.write(97);//写入一个字节数据
        fos.write('a');
        //fos.write('林');
        fos.write("\r\n".getBytes());//\r\n换行兼容性好

        //3、写一个字节数组
        byte[] bytes = {97,98,99,100,101};
        fos.write(bytes);
        fos.write("\r\n".getBytes());

        //4、写一个字节数组的一部分出去
        fos.write(bytes,0,3);
        fos.write("\r\n".getBytes());

        //5、用完流都得关掉,关闭管道
        fos.close();
        //解释:内存与磁盘中有一条线,内存速度较快,磁盘速度较慢,用完之后要关闭流释放这条线
    }
}

文件字节输出流小结

文件复制

java 复制代码
package com.itheima.demo6copy;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyDemo1 {
    public static void main(String[] args) throws Exception {
        //目标:使用字节流完成文件的复制操作
        //源文件:D:\照片\yy.png
        //目标文件:C:\照片\yy.png(复制过去的时候必须带文件名,无法自动生成文件名)

        copyFile("D:\\照片\\yy.png","C:\\照片\\yy.png");
    }

    //复制文件
    public static void copyFile(String srcPath,String destPath) throws Exception{
        //1、创建一个文件字节输入流管道与源文件接通
        InputStream fis = new FileInputStream(srcPath);
        //2、创建一个文件字节输出流管道与目标文件接通
        OutputStream fos = new FileOutputStream(destPath);
        //3、定义一个字节数组,用于存取数据
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            //4、把读取到的数据,写入到输出流中,一桶(1024个字节)一桶写
            fos.write(buffer, 0, len);
        }
        System.out.println("复制完毕");
        fos.close();
        fis.close();
    }
}

字节流非常适合做文件的复制操作

任何文件的底层都是字节,字节流做复制,是一字不漏的转移完全部字节,只要复制后的文件格式一致就没问题

资源释放问题

快捷键:ctrl+Alt+t

基于该资源释放方案修改前面的图片复制代码

缺点:臃肿

java 复制代码
package com.itheima.demo6copy;

import java.io.*;

public class CopyDemo1 {
    public static void main(String[] args) throws Exception {
        //目标:使用字节流完成文件的复制操作
        //源文件:D:\照片\yy.png
        //目标文件:C:\照片\yy.png(复制过去的时候必须带文件名,无法自动生成文件名)

        copyFile("D:\\照片\\yy.png","C:\\照片\\yy.png");
    }

    //复制文件
    public static void copyFile(String srcPath,String destPath) throws Exception{
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //即便这里出现了异常,那么fos和fis也会被关闭
            //1、创建一个文件字节输入流管道与源文件接通
            fis = new FileInputStream(srcPath);
            //2、创建一个文件字节输出流管道与目标文件接通
            fos = new FileOutputStream(destPath);
            //3、定义一个字节数组,用于存取数据
            byte[] buffer = new byte[1024];
            int len;
            while ((len = fis.read(buffer)) != -1) {
                //4、把读取到的数据,写入到输出流中,一桶(1024个字节)一桶写
                fos.write(buffer, 0, len);
            }
            System.out.println("复制完毕");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //最后一定会执行一次,即便程序出现异常
            try {
                if(fos !=null)fos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            try {
                if(fis !=null)fis.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

新方法

1、什么是资源?

资源一般指的是最终实现了AutoCloseable接口

2、try()里面只能放置资源对象,用完后,最终会自动调用其close方法关闭

使用最新方法关闭流

java 复制代码
package com.itheima.demo6copy;

import java.io.*;

public class CopyDemo1 {
    public static void main(String[] args) throws Exception {
        //目标:掌握资源的新方式
        //源文件:D:\照片\yy.png
        //目标文件:C:\照片\yy.png(复制过去的时候必须带文件名,无法自动生成文件名)

        copyFile("D:\\照片\\yy.png","C:\\照片\\yy.png");
    }

    //复制文件
    public static void copyFile(String srcPath,String destPath) throws Exception{
        try (
             //这里只能放置资源对象,用完后,最终会自动调用其close方法关闭
             //1、创建一个文件字节输入流管道与源文件接通
             FileInputStream fis = new FileInputStream(srcPath);
             //2、创建一个文件字节输出流管道与目标文件接通
             FileOutputStream fos = new FileOutputStream(destPath);
             )
        {
            //3、定义一个字节数组,用于存取数据
            byte[] buffer = new byte[1024];
            int len;
            while ((len = fis.read(buffer)) != -1) {
                //4、把读取到的数据,写入到输出流中,一桶(1024个字节)一桶写
                fos.write(buffer, 0, len);
            }
            System.out.println("复制完毕");
        } catch (IOException e) {
            e.printStackTrace();
        }
        }
    }
相关推荐
·薯条大王11 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
ZJH__GO14 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆14 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光15 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林15 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
marvelyu16 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
AI人工智能+电脑小能手17 小时前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
BUG指挥官17 小时前
Sa-Token和Spring Security对比
java·后端·spring
小当家.10517 小时前
深入理解 ReAct Agent:从原理到 Java 实战
java·react.js·agent·react·架构设计·agent设计
geminigoth17 小时前
Spring AI Alibaba 入门开发一(备份)
java·人工智能·spring