代码简介:利用字节缓冲输入输出流复制单文件单级文件夹里的文件或文件夹以及多级文件夹里的文件或文件夹

如果srcFile是文件时,则调用copyFile方法。因为要复制的文件有图片和视频资源,所以采用字节缓冲输入输出流,同时为了提高读取速度,采用一次读取一个字节数组的数据来复制文件。

//    复制文件
    private static void copyFile(File srcFile, File destFile) throws IOException {
//        创建字节缓冲输入流对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
//        创建字节缓冲输出流对象
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
        //一次读入一个字节数组的数据
        byte[] bys = new byte[1024];
        int len;
        while ((len = bis.read(bys)) != -1) {
            bos.write(bys, 0, len);
        }
        //释放资源
        bos.close();
        bis.close();
    }

如果srcFile是一个文件夹时,则调用copyFolder方法。

//复制文件夹
    private static void copyFolder(File srcFile, File destFile) throws IOException {
        //如果srcFile为目录,首次调用即是判断test是否为目录
        if (srcFile.isDirectory()) {
            String srcFileName = srcFile.getName(); //获取目录名,首次调用时目录名为test
            //在destFile下新建一个名为srcFile的目录,首次调用时即在code2目录下创建test目录
            File newFolder = new File(destFile, srcFileName);
//            如果目录不存在,则新建目录
            if (!newFolder.exists()) {
                newFolder.mkdir();
            }
//            将srcFile目录下的文件或目录存入文件数组中
            File[] listFiles = srcFile.listFiles();
            //        遍历test目录下所有的文件
            for (File file : listFiles) {
//                利用递归将file作为srcFile,newFolder作为destFile调用copyFolder方法
                copyFolder(file, newFolder);
            }
        } else {
            String srcFileName = srcFile.getName();
            File newFile = new File(destFile, srcFileName);
            copyFile(srcFile, newFile);
        }
    }

主方法:

public static void main(String[] args) throws IOException {
//        创建数据源File对象srcFolder,路径为文件或目录原本存放的位置+文件或目录名,自己根据实际情况而定
//        此处文件名为test,存放于C:\Users\Administrator\Desktop
        File srcFile = new File("C:\\Users\\Administrator\\Desktop\\test");
//        创建目的地File对象destFolder,路径为你想要存放的位置,此处想存放的位置为我Java项目下的code2模块下
        File destFile = new File("code2");

        //如果test为文件
        if (srcFile.isFile()) {
            String srcFileName = srcFile.getName(); //获取文件名
            File newFile = new File(destFile, srcFileName); //创建新的目的地File对象
            copyFile(srcFile, newFile); //复制文件
        } else {
            copyFolder(srcFile, destFile);
        }
    }

完整代码:

import java.io.*;

public class CopyFoldersTest {
    public static void main(String[] args) throws IOException {
//        创建数据源File对象srcFolder,路径为文件或目录原本存放的位置+文件或目录名,自己根据实际情况而定
//        此处文件名为test,存放于C:\Users\Administrator\Desktop
        File srcFile = new File("C:\\Users\\Administrator\\Desktop\\test");
//        创建目的地File对象destFolder,路径为你想要存放的位置,此处想存放的位置为我Java项目下的code2模块下
        File destFile = new File("code2");

        //如果test为文件
        if (srcFile.isFile()) {
            String srcFileName = srcFile.getName(); //获取文件名
            File newFile = new File(destFile, srcFileName); //创建新的目的地File对象
            copyFile(srcFile, newFile); //复制文件
        } else {
            copyFolder(srcFile, destFile);
        }
    }

    //复制文件夹
    private static void copyFolder(File srcFile, File destFile) throws IOException {
        //如果srcFile为目录,首次调用即是判断test是否为目录
        if (srcFile.isDirectory()) {
            String srcFileName = srcFile.getName(); //获取目录名,首次调用时目录名为test
            //在destFile下新建一个名为srcFile的目录,首次调用时即在code2目录下创建test目录
            File newFolder = new File(destFile, srcFileName);
//            如果目录不存在,则新建目录
            if (!newFolder.exists()) {
                newFolder.mkdir();
            }
//            将srcFile目录下的文件或目录存入文件数组中
            File[] listFiles = srcFile.listFiles();
            //        遍历test目录下所有的文件
            for (File file : listFiles) {
//                利用递归将file作为srcFile,newFolder作为destFile调用copyFolder方法
                copyFolder(file, newFolder);
            }
        } else {
            String srcFileName = srcFile.getName();
            File newFile = new File(destFile, srcFileName);
            copyFile(srcFile, newFile);
        }
    }

    //    复制文件
    private static void copyFile(File srcFile, File destFile) throws IOException {
//        创建字节缓冲输入流对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
//        创建字节缓冲输出流对象
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
        //一次读入一个字节数组的数据
        byte[] bys = new byte[1024];
        int len;
        while ((len = bis.read(bys)) != -1) {
            bos.write(bys, 0, len);
        }
        //释放资源
        bos.close();
        bis.close();
    }
}

刚开始写文章,文章有什么问题的话欢迎评论指正,各位觉得写得还行的话给个点赞加关注呗,感谢大家!