Java使用缓存流进行文件的复制

本文最后更新于:1 年前

1- 准备要复制的文件路径和复制后的路径

private static final String FilePath1 = "D:/测试文件.txt";
private static final String FilePath2 = "D:/测试文件_副本.txt";

2 - 导入IO库

import java.io.*;

3 - 拷贝方法

/**
* 使用缓存流拷贝文件
* @return 拷贝的耗时
*/
private static long copyFileByBufferedStream() throws IOException {
    File file = new File(FilePath1);
    if (!file.exists()){
        System.out.println("文件不存在,复制失败!");
    }
    // 记录开始时间
    long startTime = System.currentTimeMillis();
    // 读取的缓存流
    InputStream inputStream = new FileInputStream(file);
    BufferedInputStream bInStream = new BufferedInputStream(inputStream);
    // 写入的缓存流
    OutputStream outputStream = new FileOutputStream(FilePath2);
    BufferedOutputStream bOutStream = new BufferedOutputStream(outputStream);
    // 逐个字节的复制
    int i = 1; // 读取的临时变量
    while ((i = bInStream.read()) != -1){
        bOutStream.write(i); // 读取一个字节,就写入缓存中!
    }
    // 注意,一定要关闭缓存流对象,清空缓冲区,这样才可以复制成功
    bInStream.close();
    bOutStream.close();
    System.out.println("文件复制成功!");
    return System.currentTimeMillis() - startTime;
}

使用缓存流,在比较大的文件中可以看到明显的效率提升

4 - 完整的代码

import java.io.*;

public class BufferedStreamDemo {

    private static final String FilePath1 = "D:/测试文件.txt";
    private static final String FilePath2 = "D:/测试文件_副本.txt";

    public static void main(String[] args) throws IOException {
    long time = copyFileByBufferedStream();
    System.out.println("拷贝耗时: " + time + "毫秒";
    }

    /**
    * 使用缓存流拷贝文件
    * @return 拷贝的耗时
    */
    private static long copyFileByBufferedStream() throws IOException {
        File file = new File(FilePath1);
        if (!file.exists()){
            System.out.println("文件不存在,复制失败!");
        }
        // 记录开始时间
        long startTime = System.currentTimeMillis();
        // 读取的缓存流
        InputStream inputStream = new FileInputStream(file);
        BufferedInputStream bInStream = new BufferedInputStream(inputStream);
        // 写入的缓存流
        OutputStream outputStream = new FileOutputStream(FilePath2);
        BufferedOutputStream bOutStream = new BufferedOutputStream(outputStream);
        // 逐个字节的复制
        int i = 1; // 读取的临时变量
        while ((i = bInStream.read()) != -1){
            bOutStream.write(i); // 读取一个字节,就写入缓存中!
        }
        // 注意,一定要关闭缓存流对象,清空缓冲区,这样才可以复制成功
        bInStream.close();
        bOutStream.close();
        System.out.println("文件复制成功!");
        return System.currentTimeMillis() - startTime;
    }
}

5 - 输出示例

文件复制成功!
拷贝耗时: 4019毫秒