java將指定目錄下文件復制到目標文件夾的幾種小方法
更新時間:2024年01月18日 16:14:30 作者:澤澤澤json
在Java中有多種方法可以實現(xiàn)文件的復制,這篇文章主要給大家介紹了關于java將指定目錄下文件復制到目標文件夾的幾種小方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
技術介紹
1. 遞歸
- 遞歸是一種基于函數(shù)調(diào)用自身的方法。它是一種非常常見的計算機編程技術,可以讓程序員通過簡單、優(yōu)雅的方式來解決許多問題。
- 簡單來說,遞歸是在函數(shù)執(zhí)行過程中調(diào)用自身的過程。當函數(shù)被調(diào)用時,它會先執(zhí)行函數(shù)體內(nèi)的語句,然后再調(diào)用自己,這個過程將會重復執(zhí)行數(shù)次,直到達到某個條件才會終止遞歸調(diào)用。
- 在編程中,遞歸可以使一些問題的解決方法變得清晰、簡潔。比如樹的遍歷、圖的搜索以及處理嵌套數(shù)據(jù)結構等,都可以通過遞歸來實現(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() - 檢查文件是否是一個標準文件。
- 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. 拷貝文件到目標文件夾
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)) { // 如果是圖片文件,拷貝到目標文件夾中 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); //文件夾如果不存在則創(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 目標文件夾 * @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)) { // 如果是圖片文件,拷貝到目標文件夾中 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指定文件復制到目標文件夾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring根據(jù)XML配置文件 p名稱空間注入屬性的實例
下面小編就為大家分享一篇Spring根據(jù)XML配置文件 p名稱空間注入屬性的實例,具有很好的參考價值。希望對大家有所幫助2017-11-11java圖像識別工具類(ImageRecognitionUtils)使用實例詳解
這篇文章主要介紹了如何在Java中使用OpenCV進行圖像識別,包括圖像加載、預處理、分類、人臉檢測和特征提取等步驟,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-01-01