Java-使用字节流实现文件复制

原理:从已有文件中读取字节,将该字节写出到另一个文件中。

步骤:

  1. 创建流对象(指定数据源、指定目的地)
  2. 读写数据(定义数组、定义长度、循环读取、写出数据)
  3. 关闭资源

建议:使用数组进行读取,即每次读取多个字节,减少系统IO操作次数,提高读写效率。

package com.joeaaa.copyfile;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class copyFile {
    public static void main(String[] args) throws IOException {
        long start_time = System.currentTimeMillis();
        // 创建字节流输入对象,构造方法中绑定要读取的数据源
        FileInputStream fis = new FileInputStream("/Users/joe/IdeaProjects/java/demo1/src/com/joeaaa/a.jpg");
        // 创建字节数入流对象,构造方法中绑定要写入的目的地
        FileOutputStream fos = new FileOutputStream("/Users/joe/IdeaProjects/java/demo1/src/com/joeaaa/c.jpg");
        // 优化,使用数组缓冲
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = fis.read(bytes))!= -1){
            // 使用字节输出流write方法,将读取到的字节写入目的地文件中
            fos.write(bytes, 0,len);
        }
        // 释放资源:先关输出,后关输入。
        fos.close();
        fis.close();
        long end_time = System.currentTimeMillis();
        System.out.println("耗时:"+(end_time-start_time)+"毫秒");
    }
}

/*
/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=59699:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Users/joe/IdeaProjects/java/out/production/demo1 com.joeaaa.copyfile.copyFile
耗时:3毫秒

Process finished with exit code 0
*/