java将指定目录下文件复制到目标文件夹的几种小方法

 更新时间:2024年01月18日 16:14:30   作者:泽泽泽json  
在Java中有多种方法可以实现文件的复制,这篇文章主要给大家介绍了关于java将指定目录下文件复制到目标文件夹的几种小方法,文中通过代码介绍的非常详细,需要的朋友可以参考下

技术介绍

1. 递归

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

2. File

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

实现

首先介绍下几个小方法

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将指定目录下文件复制到目标文件夹的文章就介绍到这了,更多相关java指定文件复制到目标文件夹内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Java和WebSocket实现网页聊天室实例代码

    使用Java和WebSocket实现网页聊天室实例代码

    WebSocket是HTML5一种新的协议,它实现了浏览器与服务器全双工通信,这里就将使用WebSocket来开发网页聊天室,对Java和WebSocket实现网页聊天室的实例代码感兴趣的朋友一起学习吧
    2016-06-06
  • JVM的垃圾回收算法一起来看看

    JVM的垃圾回收算法一起来看看

    这篇文章主要为大家详细介绍了JVM的垃圾回收算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • spring boot实现profiles动态切换的示例

    spring boot实现profiles动态切换的示例

    Spring Boot支持在不同的环境下使用不同的配置文件,该技术非常有利于持续集成,在构建项目的时候只需要使用不同的构建命令就可以生成不同运行环境下war包,而不需要手动切换配置文件。
    2020-10-10
  • 详解Java的Struts框架中栈值和OGNL的使用

    详解Java的Struts框架中栈值和OGNL的使用

    这篇文章主要介绍了Java的Struts框架中栈值和OGNL的使用,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-11-11
  • springboot+redis实现微博热搜排行榜的示例代码

    springboot+redis实现微博热搜排行榜的示例代码

    本文主要介绍了springboot+redis实现微博热搜排行榜的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Spring Data JPA实现持久化存储数据到数据库的示例代码

    Spring Data JPA实现持久化存储数据到数据库的示例代码

    Spring Data JPA是Spring基于JPA规范的基础上封装的⼀套 JPA 应⽤框架,可使开发者⽤极简的代码即可实现对数据库的访问和操作。本文我们来了解如何用Spring Data JPA框架实现数据持久化存储到数据库,感兴趣的可以了解一下
    2022-04-04
  • Spring事件监听基本原理与使用详解

    Spring事件监听基本原理与使用详解

    这篇文章主要介绍了Spring事件监听基本原理与使用详解,Spring的事件监听机制和发布订阅机制是很相似的:发布了一个事件后,监听该类型事件的所有监听器会触发相应的处理逻辑,需要的朋友可以参考下
    2024-01-01
  • Java栈的三种实现方式(完整版)

    Java栈的三种实现方式(完整版)

    这篇文章主要介绍了Java栈的三种实现方式(完整版),需要的朋友可以参考下
    2020-12-12
  • 一口气说出Java 6种延时队列的实现方法(面试官也得服)

    一口气说出Java 6种延时队列的实现方法(面试官也得服)

    这篇文章主要介绍了一口气说出Java 6种延时队列的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Java实现随机出题,10道10以内加减法计算代码实例

    Java实现随机出题,10道10以内加减法计算代码实例

    这篇文章主要介绍了Java实现随机出题,10道10以内加减法计算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论