java将指定目录下的文件复制到目标文件夹

这篇具有很好参考价值的文章主要介绍了java将指定目录下的文件复制到目标文件夹。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

技术介绍

1. 递归

  • 递归是一种基于函数调用自身的方法。它是一种非常常见的计算机编程技术,可以让程序员通过简单、优雅的方式来解决许多问题。
  • 简单来说,递归是在函数执行过程中调用自身的过程。当函数被调用时,它会先执行函数体内的语句,然后再调用自己,这个过程将会重复执行数次,直到达到某个条件才会终止递归调用。
  • 在编程中,递归可以使一些问题的解决方法变得清晰、简洁。比如树的遍历、图的搜索以及处理嵌套数据结构等,都可以通过递归来实现。
  • 需要注意的是,如果递归没有正确的终止条件,它将会一直调用自身,直到程序崩溃。因此,在编写递归函数时,必须要特别注意控制递归的深度。

2. File

  • Java中的File是一个类,它代表着本地文件系统中的文件或目录。 File类可以用于对文件(或目录)的创建、删除、重命名、查询和修改等操作。可以通过调用File类的方法实现这些操作。File类也提供了一些便捷的方法来获取文件的属性,如文件大小、最后修改时间、是否可读、是否可写等属性。File类的一些常见方法包括:
  • createNewFile() - 创建一个新文件。
  • delete() - 删除一个文件。
  • exists() - 检查文件是否存在。
  • isFile() - 检查文件是否是一个标准文件。
  • isDirectory() - 检查文件是否是一个目录。
  • renameTo(newName) - 重命名文件/目录。
  • 另外,File类还提供了一些静态方法,如list()、listFiles()等,用于列出指定目录下的文件和子目录。而对于文本文件的读取和写入操作,则需要使用Java流(InputStream和OutputStream)来处理。

实现

首先介绍下几个小方法文章来源地址https://www.toymoban.com/news/detail-763180.html

1. 获取文件名

public static String getFileSimpleName(File file){
    return  file.getName().replaceAll("[\\\\/]", "");
}

2. 获取文件的后缀

 public static String getFileType(File file) {
     String fileName = file.getName();
     int dotIndex = fileName.lastIndexOf(".");
     return (dotIndex == -1) ? "" : fileName.substring(dotIndex + 1);
}

3. 拷贝文件到目标文件夹

public static void copy(File sourceFile, String destinationFolder) throws IOException {
    String destinationFilePath = destinationFolder + "/" + getFileSimpleName(sourceFile);
    File file = new File(destinationFilePath);
    if (file.exists()){
        file.delete();
    }
    Files.copy(sourceFile.toPath(), file.toPath());
}

4.递归查询文件

public static void copyFilesRecursion(File sourceDir,String destDir,String...names) throws IOException {
     // 遍历源文件夹下的所有文件和文件夹
     for (File file : sourceDir.listFiles()) {
         if (file.isDirectory()) { // 如果是文件夹,递归调用 copyImages 函数
             copyFilesRecursion(file, destDir,names);
         } else if (isMateFile(file,names)) { // 如果是图片文件,拷贝到目标文件夹中
             copy(file,destDir);
         }
     }
 }

完整代码

import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystemException;
import java.nio.file.Files;;
import java.util.Arrays;

/**
 * @author zzxjs
 * @since 2023/06/27
 */
public class FileCopy {

    /**
     * 拷贝指定文件到目标文件夹
     * @param isRecursion 是否遍历子文件夹
     * @param source 源文件夹
     * @param target 目标文件夹
     * @param mateSuffixs 匹配的文件后缀,如果为空,只要不是文件夹都复制
     */
    public static void copyFile(boolean isRecursion,String source,String target,String...mateSuffixs) throws Exception {
        File sourceFile;
        if (!(sourceFile = file(source)).isDirectory()){
            throw new FileSystemException("source not directory");
        }
        File targetFile = file(target);
        //文件夹如果不存在则创建,存在则判断是否是目录
        if (targetFile.exists()){
            if (!targetFile.isDirectory()){
                throw new FileSystemException("target not directory");
            }
        }else{
            targetFile.mkdirs();
        }
        if (isRecursion){
            copyFilesRecursion(sourceFile,target,mateSuffixs);
        }else {
            copyFiles(sourceFile,target,mateSuffixs);
        }
    }

    /**
     * 创建一个File
     * @param path 路径
     */
    public static File file(String path){
        return new File(path);
    }

    /**
     * 递归查询文件
     * @param sourceDir 源文件
     * @param destDir 目标文件夹
     * @param names 匹配的后缀名
     */
    public static void copyFilesRecursion(File sourceDir,String destDir,String...names) throws IOException {
        // 遍历源文件夹下的所有文件和文件夹
        for (File file : sourceDir.listFiles()) {
            if (file.isDirectory()) { // 如果是文件夹,递归调用 copyImages 函数
                copyFilesRecursion(file, destDir,names);
            } else if (isMateFile(file,names)) { // 如果是图片文件,拷贝到目标文件夹中
                copy(file,destDir);
            }
        }
    }

    /**
     * 非递归查询文件
     * @param sourceDir 源文件
     * @param destDir 目标文件夹
     * @param names 匹配的后缀名
     */
    public static void copyFiles(File sourceDir,String destDir,String...names) throws IOException {
        // 遍历源文件夹下的所有文件和文件夹
        for (File file : sourceDir.listFiles()) {
            if (file.isFile() && isMateFile(sourceDir,names)) {
                copy(file,destDir);
            }
        }
    }

    /**
     * 拷贝文件到目标文件夹
     */
    public static void copy(File sourceFile, String destinationFolder) throws IOException {
        String destinationFilePath = destinationFolder + "/" + getFileSimpleName(sourceFile);
        File file = new File(destinationFilePath);
        if (file.exists()){
            file.delete();
        }
        Files.copy(sourceFile.toPath(), file.toPath());
    }

    /**
     * 判断文件名是否匹配
     * @param file 文件
     * @param names 需要匹配的后缀 png、doc、ppt
     * @return 如果没有填,则是文件就复制
     */
    public static boolean isMateFile(File file,String...names) {
        if (names == null || names.length == 0){
            return true;
        }
        return Arrays.asList(names).contains(getFileType(file).toLowerCase());
    }

    /**
     * 获取文件的后缀
     * @param file 文件  Z:\jiayi\postpartum\images\doduo.zip
     * @return zip
     */
    public static String getFileType(File file) {
        String fileName = file.getName();
        int dotIndex = fileName.lastIndexOf(".");
        return (dotIndex == -1) ? "" : fileName.substring(dotIndex + 1);
    }

    /**
     * 获取文件名
     * @param file  Z:\jiayi\postpartum\images\doduo.zip
     * @return doudou.zip
     */
    public static String getFileSimpleName(File file){
        return  file.getName().replaceAll("[\\\\/]", "");
    }
}

到了这里,关于java将指定目录下的文件复制到目标文件夹的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • java将指定文件夹按照文件目录压缩为zip压缩包

    将指定的压缩包作为流发送给浏览器 下面粘贴一些没有用的东西 ,是我自已业务的逻辑,,主要逻辑是根据传入文件不同 判断将压缩包发送给浏览器 还是将xls模板发送给浏览器

    2024年02月16日
    浏览(11)
  • bat复制文件到指定文件夹

    bat复制文件到指定文件夹

    FOR /F %%N IN (\\\'DIR /B /S \\\"D:文件夹*.*\\\"\\\') DO (COPY %%N \\\"E:文件夹\\\") *.*代表所有文件,文件夹除外。 解释:将D盘文件夹所有文件,复制到E盘文件夹。 文件名只能,中文数字英文组合,带有特殊符号的无法复制。    

    2024年02月13日
    浏览(13)
  • C#选定文件复制到指定文件夹

    搜索到的: string pLocalFilePath =\\\"\\\";//要复制的文件路径 string pSaveFilePath =\\\"\\\";//指定存储的路径 if (File.Exists(pLocalFilePath))//必须判断要复制的文件是否存在 { File.Copy(pLocalFilePath, pSaveFilePath, true);//三个参数分别是源文件路径,存储路径,若存储路径有相同文件是否替换 } 自己应用:

    2023年04月21日
    浏览(12)
  • linux 查看文件夹下的文件个数(当前目录的文件数)

    linux 查看文件夹下的文件个数(当前目录的文件数) 查看文件夹下的文件个数(当前目录的文件数) 说明: ls -l : 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等) grep ^- : 这里将长列表输出信息过滤一部分,只保留一般文件,如

    2024年02月16日
    浏览(38)
  • python中针对同一目录或不同目录下的其他文件或文件夹的import用法

    在Python中, import 用于导入其他文件或模块的内容,让你可以在当前文件中使用这些内容。下面我将介绍如何使用 import 来导入同一目录或不同目录下的文件或文件夹。 1. 导入同一目录下的文件或模块: 如果你要导入与当前文件位于同一目录下的文件或模块,可以直接

    2024年02月14日
    浏览(13)
  • C语言读取文件夹一级子目录的指定类型文件

    参考链接: C语言读取指定文件夹下的所有文件(各种信息)_c语言读取文件夹下的所有文件-CSDN博客  参考以上文案,做成了几个函数,用于读取任意文件夹下的指定后缀的文件。

    2024年02月21日
    浏览(15)
  • Python小技巧【1】——获取指定文件夹下的所有文件【glob模块】

    Python小技巧【1】——获取指定文件夹下的所有文件【glob模块】

    glob模块 是Python标准库中一个重要的模块,主要用来 查找符合特定规则的目录和文件,并将搜索的到的结果返回到一个列表中。  1、常用函数glob() 返回符合匹配条件的所有文件的路径。  2、重要参数recursive recursive参数 代表是否递归调用,与特殊通配符 ** 一同使用,默认为

    2024年02月04日
    浏览(43)
  • Unity Editor 遍历指定文件夹下的所有prefab

    适用场景:                  查找指定文件夹下所有的prefab并找到所有引用的图片及路径。 步骤分析:                 1、通过guid获取资源路径                 2、获取文件夹中包含后缀为.prefab的路径                 3、编辑器下加载该资源(如果对资源有编辑的话

    2024年02月04日
    浏览(18)
  • Python os.listdir方法(获取文件夹目录下的内容)

    os.listdir 方法。参数为文件夹路径, 可以返回文件夹下的所有子文件、文件名称, 但不能返回子文件夹下的文件

    2024年02月14日
    浏览(40)
  • Unity工程目录下的文件夹(Assets、Library、Logs、Packages、ProjectSettings、UserSettings)

    Unity工程目录下的文件夹(Assets、Library、Logs、Packages、ProjectSettings、UserSettings)

    通常Unity里的工程目录都是这样: 一、Assets  工程资源文件夹(美术资源,脚本等等)         Unity工程中所用到的所有Asset资源都放到这个文件夹里,是资源文件的要目录,很多API都是基于这个文件目录。查找目录都需要带上Assets,例如AssetDataBase 二、Library    库文件夹

    2023年04月09日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包