指定文件目录下-递归只拷贝文件到指定目录

本文介绍如何使用Java编程,通过递归方式查找指定目录下的所有文件,并将其复制到目标目录。详细步骤包括主方法的调用、递归遍历文件以及执行文件拷贝操作。

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

1 主方法

    public static void main(String[] args) {
        List<File> fileList = new ArrayList<>();
        // 1 读取源文件目录-读取全部文件 存放在list里面
        JavaFileUtils.getAllFiles("文件源地址", fileList);
        // 2 遍历list 将文件移动到新目的地(名称需要修改: 文件上一级目录名称-文件名)
        if (!JavaListUtils.isEmpty(fileList)) {
            for (File file : fileList) {
                JavaFileUtils.cpFileToObj(file, "文件拷贝地址");
            }
        }
    }

2 递归将目录下的所有文件查找出来


   public final static String linux = "/"; // linux
//    public final static String linux = "\\";    // windows

    /**
     * 读取源文件目录-读取全部文件 存放在list里面
     *
     * @param souceAddress 目录路径
     * @param fileList
     * @return
     */
    public static void getAllFiles(String souceAddress, List<File> fileList) {
        // 0 入参校验
        if (souceAddress == null || "".equals(souceAddress.trim()) || fileList == null) {
            log.info("入参为空souceAddress:{},fileList:{}", souceAddress, fileList);
            return;
        }
        try {
            // 1.0 读取文件
            File file = new File(souceAddress);
            if (file == null) {
                log.info("入参为空");
                return;
            }
            // 2 如果是文件 - 将它放进集合中
            if (!file.isDirectory()) {
                fileList.add(file);
            } else {
                // 3 是文件夹-递归调用
                String[] list = file.list();
                if (list == null || list.length <= 0) {
                    return;
                }
                for (String souceAddressStr : list) {
                    try {
                        // 3.1 如果是文件 -添加到集合
                        File fileIn = new File(souceAddress + ThirdServiceImpl.linux + souceAddressStr);
                        if (!fileIn.isDirectory()) {
                            fileList.add(fileIn);
                        } else {
                            // 3.2 如果是文件+ -继续递归
                            getAllFiles(souceAddress + ThirdServiceImpl.linux + souceAddressStr, fileList);
                        }
                    } catch (Exception e) {
                        log.info("出错了souceAddressStr:{},souceAddress:{}", souceAddressStr, souceAddress);
                    }
                }
            }
        } catch (Exception e) {
            log.info("外部出错了souceAddress:{}", souceAddress);
        }
        return;
    }

3 将文件集体拷贝到指定目录


    /**
     * 将文件拷贝到目录下 名称需要拼接 上一层目录名-文件名
     *
     * @param file          目标文件
     * @param objectAddress 移动到的目的地路径
     */
    public static void cpFileToObj(File file, String objectAddress) {

        if (file == null) {
            log.info("文件名:{}", file.getName());
            log.info("文件路径getAbsolutePath:{}", file.getAbsolutePath());
            return;
        }
        // 开始复制
        log.info("文件名开始:{}", file.getName());
        log.info("文件路径getAbsolutePath:{}", file.getAbsolutePath());
        try {
            FileInputStream fileInputStream = new FileInputStream(file);    // 创建输入流对象
            String objectAddressStr = objectAddress + ThirdServiceImpl.linux + file.getParentFile().getName() + "-" + file.getName();
            log.info("复制的文件名开始:{}", objectAddressStr);
            FileOutputStream fileOutputStream = new FileOutputStream(new File(objectAddressStr));    // 创建输出流对象
            try {
                byte datas[] = new byte[1024 * 8];//创建搬运工具
                int len = 0;//创建长度
                while ((len = fileInputStream.read(datas)) != -1)//循环读取数据
                {
                    fileOutputStream.write(datas, 0, len);
                }
            } catch (FileNotFoundException e) {
                log.error("内层文件拷贝出错");
            }
            log.info("复制的文件名结束:{}", objectAddressStr);
            fileInputStream.close();//释放资源
            fileOutputStream.close();//释放资源
            log.info("复制的文件名释放资源结束:{}", objectAddressStr);
        } catch (FileNotFoundException e) {
            log.error("文件拷贝出错");
        } catch (IOException e) {
            e.printStackTrace();
        }
        log.info("文件名结束:{}", file.getName());
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值