拷贝目录及其下所有的文件(Java递归实现)

由于博客内容为空,暂无法提供包含关键信息的摘要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.sunny;

import java.io.*;
/**
 * 递归地读取目录并完成目录的拷贝
 */
public class DirectoryCopyTest {
    public static void main(String[] args) {
        //拷贝源
        File sourceFile = new File("F:\\test");
        //拷贝目标
        File disFile = new File("D:\\test");
        if(!disFile.exists()){
            System.out.println("当前目录不存在,正在新建...");
            disFile.mkdir();
        }
        System.out.println("------目录拷贝开始!------");
        //调用拷贝方法
        getFiles(sourceFile,disFile);
        System.out.println("------目录拷贝完成!------");

    }

    /**
     * 拷贝目录方法
     * @param sourceFile 拷贝源
     * @param disFile 拷贝目标
     */

    public static void getFiles(File sourceFile,File disFile){
        //如果是文件则直接获取,并拷贝即可;
        if(sourceFile.isFile()){
            FileInputStream is = null;
            FileOutputStream os = null;
            try {
                is = new FileInputStream(sourceFile);
                os = new FileOutputStream(disFile);
                //边读边写
                byte[] bytes = new byte[1024*1024];//1M大小
                int readCount = 0 ;
                //注意,这里直接输出sourceFile其实是调用其toString方法,默认得到其完整路径
                System.out.println("正在拷贝" + sourceFile);
                while ((readCount = is.read(bytes)) != -1){
                    os.write(bytes,0, readCount);
                }
                os.flush();//刷新
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (os != null) {
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        //如果是目录,需要先创建并递归至子文件,
        }else {
            File[] files = sourceFile.listFiles();
            for (File file1 : files) {
                //走到哪个目录就新建哪个目录
                File file = new File(sourceFile+ "\\" + file1.getName());
                File newDisFile = new File(disFile+ "\\" + file1.getName());
                if(file.isDirectory()){
                    newDisFile.mkdir();
                }
                //递归调用
                getFiles(file,newDisFile);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ED_Sunny小王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值