最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java將指定目錄下文件復(fù)制到目標(biāo)文件夾的幾種小方法

 更新時(shí)間:2024年01月18日 16:14:30   作者:澤澤澤json  
在Java中有多種方法可以實(shí)現(xiàn)文件的復(fù)制,這篇文章主要給大家介紹了關(guān)于java將指定目錄下文件復(fù)制到目標(biāo)文件夾的幾種小方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

技術(shù)介紹

1. 遞歸

  • 遞歸是一種基于函數(shù)調(diào)用自身的方法。它是一種非常常見(jiàn)的計(jì)算機(jī)編程技術(shù),可以讓程序員通過(guò)簡(jiǎn)單、優(yōu)雅的方式來(lái)解決許多問(wèn)題。
  • 簡(jiǎn)單來(lái)說(shuō),遞歸是在函數(shù)執(zhí)行過(guò)程中調(diào)用自身的過(guò)程。當(dāng)函數(shù)被調(diào)用時(shí),它會(huì)先執(zhí)行函數(shù)體內(nèi)的語(yǔ)句,然后再調(diào)用自己,這個(gè)過(guò)程將會(huì)重復(fù)執(zhí)行數(shù)次,直到達(dá)到某個(gè)條件才會(huì)終止遞歸調(diào)用。
  • 在編程中,遞歸可以使一些問(wèn)題的解決方法變得清晰、簡(jiǎn)潔。比如樹(shù)的遍歷、圖的搜索以及處理嵌套數(shù)據(jù)結(jié)構(gòu)等,都可以通過(guò)遞歸來(lái)實(shí)現(xiàn)。
  • 需要注意的是,如果遞歸沒(méi)有正確的終止條件,它將會(huì)一直調(diào)用自身,直到程序崩潰。因此,在編寫(xiě)遞歸函數(shù)時(shí),必須要特別注意控制遞歸的深度。

2. File

  • Java中的File是一個(gè)類(lèi),它代表著本地文件系統(tǒng)中的文件或目錄。 File類(lèi)可以用于對(duì)文件(或目錄)的創(chuàng)建、刪除、重命名、查詢(xún)和修改等操作??梢酝ㄟ^(guò)調(diào)用File類(lèi)的方法實(shí)現(xiàn)這些操作。File類(lèi)也提供了一些便捷的方法來(lái)獲取文件的屬性,如文件大小、最后修改時(shí)間、是否可讀、是否可寫(xiě)等屬性。File類(lèi)的一些常見(jiàn)方法包括:
  • createNewFile() - 創(chuàng)建一個(gè)新文件。
  • delete() - 刪除一個(gè)文件。
  • exists() - 檢查文件是否存在。
  • isFile() - 檢查文件是否是一個(gè)標(biāo)準(zhǔn)文件。
  • isDirectory() - 檢查文件是否是一個(gè)目錄。
  • renameTo(newName) - 重命名文件/目錄。
  • 另外,F(xiàn)ile類(lèi)還提供了一些靜態(tài)方法,如list()、listFiles()等,用于列出指定目錄下的文件和子目錄。而對(duì)于文本文件的讀取和寫(xiě)入操作,則需要使用Java流(InputStream和OutputStream)來(lái)處理。

實(shí)現(xiàn)

首先介紹下幾個(gè)小方法

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. 拷貝文件到目標(biāo)文件夾

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.遞歸查詢(xún)文件

public static void copyFilesRecursion(File sourceDir,String destDir,String...names) throws IOException {
     // 遍歷源文件夾下的所有文件和文件夾
     for (File file : sourceDir.listFiles()) {
         if (file.isDirectory()) { // 如果是文件夾,遞歸調(diào)用 copyImages 函數(shù)
             copyFilesRecursion(file, destDir,names);
         } else if (isMateFile(file,names)) { // 如果是圖片文件,拷貝到目標(biāo)文件夾中
             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 {

    /**
     * 拷貝指定文件到目標(biāo)文件夾
     * @param isRecursion 是否遍歷子文件夾
     * @param source 源文件夾
     * @param target 目標(biāo)文件夾
     * @param mateSuffixs 匹配的文件后綴,如果為空,只要不是文件夾都復(fù)制
     */
    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);
        //文件夾如果不存在則創(chuàng)建,存在則判斷是否是目錄
        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);
        }
    }

    /**
     * 創(chuàng)建一個(gè)File
     * @param path 路徑
     */
    public static File file(String path){
        return new File(path);
    }

    /**
     * 遞歸查詢(xún)文件
     * @param sourceDir 源文件
     * @param destDir 目標(biāo)文件夾
     * @param names 匹配的后綴名
     */
    public static void copyFilesRecursion(File sourceDir,String destDir,String...names) throws IOException {
        // 遍歷源文件夾下的所有文件和文件夾
        for (File file : sourceDir.listFiles()) {
            if (file.isDirectory()) { // 如果是文件夾,遞歸調(diào)用 copyImages 函數(shù)
                copyFilesRecursion(file, destDir,names);
            } else if (isMateFile(file,names)) { // 如果是圖片文件,拷貝到目標(biāo)文件夾中
                copy(file,destDir);
            }
        }
    }

    /**
     * 非遞歸查詢(xún)文件
     * @param sourceDir 源文件
     * @param destDir 目標(biāo)文件夾
     * @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);
            }
        }
    }

    /**
     * 拷貝文件到目標(biāo)文件夾
     */
    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 如果沒(méi)有填,則是文件就復(fù)制
     */
    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("[\\\\/]", "");
    }
}

總結(jié) 

到此這篇關(guān)于java將指定目錄下文件復(fù)制到目標(biāo)文件夾的文章就介紹到這了,更多相關(guān)java指定文件復(fù)制到目標(biāo)文件夾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java對(duì)象數(shù)組實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    java對(duì)象數(shù)組實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java對(duì)象數(shù)組實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Jmeter跨線(xiàn)程組傳值調(diào)用實(shí)現(xiàn)圖解

    Jmeter跨線(xiàn)程組傳值調(diào)用實(shí)現(xiàn)圖解

    這篇文章主要介紹了Jmeter跨線(xiàn)程組傳值調(diào)用實(shí)現(xiàn)圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java中用String.Join美化代碼的實(shí)例講解

    java中用String.Join美化代碼的實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于java中用String.Join美化代碼的實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Java?JDK21?新特性全面解析

    Java?JDK21?新特性全面解析

    JDK221作為JTS版本,核心正式特性提升開(kāi)發(fā)效率、程序性能和代碼安全性,虛擬線(xiàn)線(xiàn)、模式匹配fswitch、記錄模式、密封類(lèi)、分代ZGC、序列化集合六大特性,適合高并發(fā)、大數(shù)據(jù)、企業(yè)級(jí)應(yīng)用場(chǎng)景,本文給大家介紹Java?JDK21?新特性,感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • Java中泛型總結(jié)(推薦)

    Java中泛型總結(jié)(推薦)

    這篇文章主要介紹了Java中泛型總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • MyBatis的JdbcType與Oracle、MySql數(shù)據(jù)類(lèi)型一覽表

    MyBatis的JdbcType與Oracle、MySql數(shù)據(jù)類(lèi)型一覽表

    這篇文章主要介紹了MyBatis的JdbcType與Oracle、MySql數(shù)據(jù)類(lèi)型一覽表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 接口重試的7種常用方案詳細(xì)介紹

    接口重試的7種常用方案詳細(xì)介紹

    這篇文章主要為大家詳細(xì)介紹了接口重試的7種常用方案,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以根據(jù)需求選擇
    2025-03-03
  • Java詳解使用線(xiàn)程池處理任務(wù)方法

    Java詳解使用線(xiàn)程池處理任務(wù)方法

    java中經(jīng)常需要用到多線(xiàn)程來(lái)處理,我們非常不建議單純使用繼承Thread或者實(shí)現(xiàn)Runnable接口的方式來(lái)創(chuàng)建線(xiàn)程,那樣勢(shì)必有創(chuàng)建及銷(xiāo)毀線(xiàn)程耗費(fèi)資源、線(xiàn)程上下文切換問(wèn)題。同時(shí)創(chuàng)建過(guò)多的線(xiàn)程也可能引發(fā)資源耗盡的風(fēng)險(xiǎn),這個(gè)時(shí)候引入線(xiàn)程池比較合理,方便線(xiàn)程任務(wù)的管理
    2022-05-05
  • 詳解Java I/O流中的字符流有哪些

    詳解Java I/O流中的字符流有哪些

    字節(jié)流的功能已經(jīng)十分強(qiáng)大,幾乎可以直接或間接地處理任何類(lèi)型的輸入/輸出操作,但它卻不能直接操作16位的Unicode字符,這就需要使用字符流,所以在今天的內(nèi)容中,小編會(huì)給大家講解IO流中的字符流,希望各位能夠繼續(xù)耐心學(xué)習(xí)
    2023-10-10
  • 解決Callable的對(duì)象中,用@Autowired注入別的對(duì)象失敗問(wèn)題

    解決Callable的對(duì)象中,用@Autowired注入別的對(duì)象失敗問(wèn)題

    這篇文章主要介紹了解決Callable的對(duì)象中,用@Autowired注入別的對(duì)象失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

卓资县| 石门县| 海阳市| 广丰县| 罗山县| 海淀区| 海口市| 南靖县| 攀枝花市| 邓州市| 西宁市| 林周县| 太仆寺旗| 南溪县| 竹北市| 新晃| 嘉荫县| 马龙县| 江达县| 亚东县| 翁源县| 富宁县| 彭阳县| 和硕县| 泾源县| 栖霞市| 特克斯县| 海伦市| 车致| 威宁| 罗城| 龙陵县| 宁晋县| 海晏县| 黄浦区| 博白县| 铜梁县| 卢湾区| 洪湖市| 特克斯县| 万年县|