java將指定目錄下文件復(fù)制到目標(biāo)文件夾的幾種小方法
技術(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)建、刪除、重命名、查詢和修改等操作。可以通過(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.遞歸查詢文件
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);
}
/**
* 遞歸查詢文件
* @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 如果沒(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)文章
Spring根據(jù)XML配置文件 p名稱空間注入屬性的實(shí)例
下面小編就為大家分享一篇Spring根據(jù)XML配置文件 p名稱空間注入屬性的實(shí)例,具有很好的參考價(jià)值。希望對(duì)大家有所幫助2017-11-11
JavaSE系列基礎(chǔ)包裝類(lèi)及日歷類(lèi)詳解
這篇文章主要介紹的是JavaSE中常用的基礎(chǔ)包裝類(lèi)以及日歷類(lèi)的使用詳解,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們學(xué)習(xí)JavaSE有一定的幫助,感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)吧2021-12-12
java面向?qū)ο笤O(shè)計(jì)原則之合成復(fù)用原則示例詳解
這篇文章主要介紹了java面向?qū)ο笤O(shè)計(jì)原則之合成復(fù)用原則的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-10-10
Springcloud eureka搭建高可用集群過(guò)程圖解
這篇文章主要介紹了Springcloud eureka搭建高可用集群過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
從零開(kāi)始Mybatis連接數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Mybatis連接數(shù)據(jù)庫(kù)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
java圖像識(shí)別工具類(lèi)(ImageRecognitionUtils)使用實(shí)例詳解
這篇文章主要介紹了如何在Java中使用OpenCV進(jìn)行圖像識(shí)別,包括圖像加載、預(yù)處理、分類(lèi)、人臉檢測(cè)和特征提取等步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01

