文件复制小案例

过程

1、先输入:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去

2、输出:以内存为基准,把内存中的数据以字节的形式写到文件中

package com.itheima.demo6copy;

import java.io.*;

public class CopyDemo1 {
    public static void main(String[] args) throws Exception {
        //目标:使用字节流完成文件的复制操作
        //源文件:E:\Pictures\dog.jpeg
        //目标文件: D:\jt_new.jpg
        try {
            copyFile("E:\\Pictures\\dog.jpeg", "D:\\jt_new.jpg");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void copyFile(String srcPath, String destPath) throws IOException {
        //1、创建一个文件字节输入流管道和源文件接通,文件字节输出流管道和目标文件接通
        InputStream fis = new FileInputStream(srcPath);
        OutputStream fos = new FileOutputStream(destPath);
        //2、读取一个字节数组,写入一个字节数组
        byte[] buffer = new byte[1024];
        int len;
        while((len = fis.read(buffer)) != -1){
            //fis.read(buffer)尝试从源文件中读取最多为buffer数组的长度的字节数量,存到buffer数组中。并返回读取的字节数量

            fos.write(buffer,0,len);//fos.write(buffer,0,len)把buffer数组中前len个字节写入目标文件
            /**
             * 每次调用write()方法时,它都会从文件指针当前所在的位置开始写入指定数量的字节(len)。
             * 但是呢,每次调用write()后,文件指针会向前移动len个位置。
             * 所以下次再调用write()时,它会从文件指针的新位置继续写入
             * 这样,新写入的数据就会紧跟在上次写入的数据之后,而不会覆盖它。
             */
        }
        System.out.println("复制完成");
    }
}
注意点

1、(len = fis.read(buffer)) != -1)

fis.read(buffer)尝试从源文件中读取最多为buffer数组的长度的字节数量,存到buffer数组中。并返回读取的字节数量

2、fos.write(buffer,0,len);

fos.write(buffer,0,len)把buffer数组中前len个字节写入目标文件

3、为什么不会第二次数组的字节不会覆盖第一次

每次调用write()方法时,它都会从文件指针当前所在的位置开始写入指定数量的字节(len)。

但是呢,每次调用write()后,文件指针会向前移动len个位置。
所以下次再调用write()时,它会从文件指针的新位置继续写入
这样,新写入的数据就会紧跟在上次写入的数据之后,而不会覆盖它。

字节流的优势

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

任何文件的底层都是字节,字节流做复制,是一字不漏的转移完全部字

节,只要复制后的文件格式一致就没问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值