首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 遞歸移動資料夾內所有檔案完整實作教學

     編輯:Java 程式設計入門

前言

在 Java 開發中,處理檔案與目錄操作是常見需求。本文提供一個完整的 FileMove 工具類,示範如何遞歸移動指定資料夾內的所有檔案(包含子目錄)到目標路徑,並處理目標檔案已存在、目錄不存在自動建立等細節。

核心程式碼解析

import java.io.File;

public class FileMove {
    /**
     * 移動指定資料夾內的全部檔案
     *
     * @param from 來源資料夾路徑
     * @param to   目標資料夾路徑
     * @throws Exception 移動過程中發生的異常
     */
    public static void fileMove(String from, String to) throws Exception {
        try {
            File dir = new File(from);
            // 取得檔案清單
            File[] files = dir.listFiles();
            if (files == null) return;

            // 確保目標目錄存在
            File moveDir = new File(to);
            if (!moveDir.exists()) {
                moveDir.mkdirs();
            }

            // 遍歷並移動每個檔案/目錄
            for (int i = 0; i < files.length; i++) {
                // 若為目錄,遞歸處理
                if (files[i].isDirectory()) {
                    fileMove(files[i].getPath(), to + "\\" + files[i].getName());
                    // 移動成功後刪除原目錄
                    files[i].delete();
                }

                File moveFile = new File(moveDir.getPath() + "\\" + files[i].getName());
                // 若目標已存在同名檔案,先刪除
                if (moveFile.exists()) {
                    moveFile.delete();
                }
                // 執行移動(重命名)
                files[i].renameTo(moveFile);
            }
        } catch (Exception e) {
            throw e;
        }
    }
}

關鍵邏輯說明

  • 遞歸處理子目錄:遇到目錄時呼叫自身,將子目錄內容移動到對應的目標子目錄。
  • 自動建立目標目錄:使用 mkdirs() 確保多層路徑一次建立完成。
  • 覆蓋既有檔案:移動前檢查目標是否存在同名檔案,存在則先刪除,避免 renameTo 失敗。
  • 移動後清理來源:檔案移動成功後,原目錄透過 delete() 移除。

使用範例

public static void main(String[] args) {
    try {
        FileMove.fileMove("D:/source_folder", "D:/target_folder");
        System.out.println("移動完成!");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

注意事項

  1. renameTo 行為跨平台差異大,若需跨磁碟區移動,建議改用 Files.move (Java NIO.2) 並指定 StandardCopyOption.REPLACE_EXISTING。
  2. 大量檔案操作時,建議加入進度回呼或日誌記錄。
  3. 生產環境請加入權限檢查與更完善的例外處理。

總結

此範例展示了傳統 java.io.File API 實作資料夾遞歸移動的基本邏輯。現代專案建議改用 java.nio.file.Files 與 Path,功能更強大且跨平台相容性更好。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved