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

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

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

技術(shù)介紹

1. 遞歸

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

2. File

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

實現(xiàn)

首先介紹下幾個小方法

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.遞歸查詢文件

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)建一個File
     * @param path 路徑
     */
    public static File file(String path){
        return new File(path);
    }

    /**
     * 遞歸查詢文件
     * @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);
            }
        }
    }

    /**
     * 非遞歸查詢文件
     * @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 如果沒有填,則是文件就復(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

    java中用String.Join美化代碼的實例講解

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

    Java?JDK21?新特性全面解析

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

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

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

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

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

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

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

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

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

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

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

    解決Callable的對象中,用@Autowired注入別的對象失敗問題

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

最新評論

马尔康县| 彭阳县| 罗田县| 宣化县| 梁山县| 资源县| 重庆市| 栾城县| 堆龙德庆县| 九龙城区| 乌审旗| 运城市| 南华县| 丹凤县| 哈密市| 宜黄县| 乌审旗| 年辖:市辖区| 额敏县| 永川市| 闽清县| 雷山县| 宜州市| 沿河| 上思县| 武清区| 峡江县| 凯里市| 海原县| 铁岭市| 周宁县| 合山市| 二手房| 海盐县| 云浮市| 亚东县| 万安县| 襄城县| 遵义市| 扶绥县| 凭祥市|