查找文件并复制

递归查找指定目录中(包括子目录中),所有的.java文件,
并且,把所有这些找到的java文件,复制到一个指定的目录下

package com;
import java.io.*;
//保证1文件夹和restore文件夹是真实存在的
public class Work {
    public static void main(String[] args) throws IOException {
        //指定目录
        File dir = new File("D:\\1");
        //放筛选后文件的目标目录
        File des = new File("D:\\restore");
        findFile(dir, des);//把java文件从dir复制到des路径下
    }
    //查找指定目录中(包括子目录中),所有的.java文件,
    public static void findFile(File f, File des) throws IOException {
        if (f.isFile()) {//判断输入路径是不是文件
            if (f.getName().endsWith(".java")) {//如果已经是java文件
                copyFile(f, des);//把文件f复制到des
                return;
            }
        }
        //获取目录的下的所有File对象(包括文件和文件夹)
        File[] files = f.listFiles();
        //判断,如果是file对象不是一个目录而是一个空目录
        if (files.length == 0) {
            return;
        }
        // 程序执行到这里,那么一定是一个目录,且不是空目录
        for (int i = 0; i < files.length; i++) {
            //遍历获取的file数组
            //如果这个file对象仍然是一个目录,递归查找
            if (files[i].isDirectory() == true) {
                findFile(files[i], des);
            } else {
                //file对象是文件,判断是不是java文件
                if (files[i].getName().endsWith(".java")) {
                    copyFile(files[i], des);//直接复制文件到指定路径
                }
            }
        }
    }
    //把文件f复制到des,
    public static void copyFile(File f, File des) throws IOException {
        // 创建输入字节流对象,传参是要读入内存的文件路径("D:\\1.java")
        FileInputStream in = new FileInputStream(f.getAbsoluteFile());
        //des是目录("E:\\restore"),建一个新的File对象,
        // 内容:des的路径拼接要复制的文件名,结果("E:\\restore\\1.java")
        File file = new File(des.getAbsoluteFile(), f.getName());

        // 创建字节输出流对象,传参是内存数据要写入的文件路径
        FileOutputStream out = new FileOutputStream(file);
        //用多个字符获取文件
        byte[] bytes = new byte[1024];
        int len;
        while ((len = in.read(bytes)) != -1) {//1、先把文件副本读入内存
            out.write(bytes, 0, len);//2、再把文件副本写到外存的新位置
        }
        in.close();//关闭资源
        out.close();
    }
}
### 回答1: bat是电脑操作系统的批处理脚本文件,它可以用来自动化执行一系列的指令。在bat脚本,我们可以使用一些命令来批量查找指定文件,并将其复制指定位置。 首先,我们可以使用`dir`命令来查找文件。该命令可以列出指定目录下的所有文件文件夹。我们可以通过添加参数来过滤文件类型,例如:`dir *.txt`表示只列出txt文件。 接下来,我们可以使用`xcopy`命令来复制文件。该命令可以将文件文件夹从一个位置复制到另一个位置。我们可以使用`/s`参数来复制文件夹及其子文件的所有文件。 下面是一个示例的bat脚本,用于批量查找指定类型的文件复制指定位置: ``` @echo off set source_folder=C:\source_folder // 指定文件夹路径 set dest_folder=C:\dest_folder // 指定目标文件夹路径 set file_type=*.txt // 指定查找文件类型 dir /B /S %source_folder%\%file_type% > files.txt // 列出源文件夹下指定类型文件的路径,并保存到文件 for /f "tokens=* usebackq" %%a in ("files.txt") do ( xcopy "%%a" "%dest_folder%" /E // 复制查找到的文件到目标文件夹 ) del files.txt // 删除保存文件路径的临时文件 ``` 在脚本,我们首先设置了源文件夹的路径、目标文件夹的路径和要查找文件类型。然后,我们使用`dir`命令列出源文件夹下指定类型的文件,并将结果保存到一个临时文件。接着,使用`for`循环遍历临时文件的每一行路径,并使用`xcopy`命令将文件复制到目标文件夹。最后,删除临时文件。 通过这个脚本,我们可以方便地批量查找指定类型的文件复制指定位置,节省了手动查找复制文件的时间和精力。 ### 回答2: bat(批处理)是一种可以用于批量处理文件和系统任务的脚本语言。我将用300字回答如何使用bat批量查找文件复制的问题。 首先,我们需要创建一个新的bat文件。我们可以使用记事本或其他本编辑器来编写这个bat文件。打开一个新的文件,并将其保存为.bat文件格式,比如"copy_files.bat"。 接下来,在bat文件,我们需要使用一系列的命令来完成文件查找复制任务。一个常用的命令是"dir"命令,它用于列出文件文件夹的目录内容。例如,我们可以使用以下命令列出指定目录下的所有文件: dir C:\目标文件夹 /B /S > file_list.txt 这个命令会将目标文件的所有文件和子文件夹的路径保存到一个名为file_list.txt的文件。 接下来,我们可以使用"for"命令来遍历这个文件列表,并将每个文件复制到另一个目标文件夹。例如,我们可以使用以下命令复制每个文件到目标文件: for /F "tokens=*" %%I in (file_list.txt) do copy "%%I" 目标文件夹路径 在这个命令,"tokens=*"表示将整行本存储在变量"%%I"。然后我们使用"copy"命令复制每个文件到目标文件。 最后,我们将保存这些命令的bat文件保存,并双击运行它。它将执行文件查找复制任务,并将文件从源文件复制到目标文件。 这就是使用bat批量查找文件复制的基本过程。通过编写适当的命令,您可以根据自己的需求定制和扩展这个过程。希望这个回答对您有帮助! ### 回答3: bat是Windows操作系统一种脚本语言,可以用于批量处理文件的操作。使用bat脚本可以方便地查找文件并进行复制操作。 首先,在bat脚本可以使用"dir"命令来查找指定目录下的文件。通过在命令后面加上参数,可以限定文件名、文件类型、文件大小等进行搜索。 接着,可以使用"xcopy"命令来复制找到文件指定目录下。"xcopy"命令可以复制文件指定目录,并且保持原来的文件夹结构。 下面是一个示例的bat脚本代码,用于批量查找文件复制: ``` @echo off // 关闭命令回显 set source_dir=C:\Source // 源文件所在的目录 set target_dir=C:\Target // 目标目录 for /r %source_dir% %%a in (*.txt) do ( xcopy "%%a" %target_dir% ) ``` 以上代码的含义是,在源目录C:\Source里查找所有的txt文件,并将其复制到目标目录C:\Target下。 在实际使用时,可以将源目录和目标目录的路径修改为自己的文件夹路径,以及根据需要修改文件类型和搜索条件。 通过编写类似的bat脚本,可以快速地批量查找文件并进行复制操作,提高工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值