Java中实现复制文件文件夹:可以复制单级文件夹,也复制多级文件夹,用递归。读写数据流用BufferedInputStream/BufferedOutputStream。

可以复制单级文件夹,也复制多级文件夹,用递归

代码示例:

package com.ahclg.copyFolder;

import java.io.*;

public class CopyFolderDemo2 {
    public static void main(String[] args) {
        File srcFile = new File("E:\\javaSave");//数据源,可能是目录也可能是文件
        File destFile = new File("F:\\javaPaste");//目的地目录,在此目录下存放复制来的内容
        //调用文件夹的复制方法 ,参数类型File,可以是文件也可以是目录
        copyFolder(srcFile, destFile);
    }

    //多级文件夹复制方法,参数类型File,可以是文件也可以是目录
    private static void copyFolder(File srcFile, File destFile) {
        if (srcFile.isDirectory()) {
            String srcFileName = srcFile.getName();
            //封装新地址路径下的虚拟复本
            File newFolder = new File(destFile, srcFileName);//对应F:\javaPaste\javaSave
            if (!newFolder.exists()) {
                newFolder.mkdir();
            }
            //获取数据源File下所有文件或目录的数组
            File[] fileArray = srcFile.listFiles();
            for (File file : fileArray) {
                copyFolder(file, newFolder);
            }
        } else {
            File newFile = new File(destFile, srcFile.getName());
            copyFile(srcFile, newFile);
        }
    }

    //复制文件方法
    private static void copyFile(File srcFile, File destFile) {
        try(
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
                ) {
            byte[] bytes = new byte[1024];
            int len = 0;
            while ((len = bis.read(bytes)) != -1){
                bos.write(bytes, 0, len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

下面是复制单级文件夹供参考:

public class CopyFolderDemo1 {
    public static void main(String[] args) {
        //创建数据源目录File对象,路径是:E:\javaSave\aFile
        File srcFolder = new File("E:\\javaSave\\aFile");
        //获取数据源目录File对象的名称myFile
        String srcFolderName = srcFolder.getName();//aFile
        //创建目的地File对象

        File destFolder = new File("F:\\javaPaste", srcFolderName);//在myFile目录下存放复制而来的文件夹
        System.out.println(srcFolderName);//aFile(目录)
        //判断目的地目录对应的File是否存在,如果不存在,就创建
        if (!destFolder.exists()) {
            destFolder.mkdir();
        }
        //获取数据源目录下的所有的文件的File数组
        File[] listFiles = srcFolder.listFiles();
        //遍历File数组,得到每一个File对象,即数据源文件
        for (File srcFile : listFiles) {
            String srcFileName = srcFile.getName();
            File destFile = new File(destFolder, srcFileName);
            //复制文件
            copyFile(srcFile, destFile);
        }
    }
    //复制文件方法
    private static void copyFile(File srcFile, File destFile) {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(srcFile));
            bos = new BufferedOutputStream(new FileOutputStream(destFile));
            byte[] bytes = new byte[1024];
            int len = 0;
            while ((len = bis.read(bytes)) != -1) {
                bos.write(bytes, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bis != null){
                try {
                    bos.close();
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值