在 Java 開發中,檔案與目錄的基本操作(複製、移動、刪除)是高頻需求。雖然 JDK 7+ 提供了 Files.copy 等現代 API,但理解基於流的傳統實作有助於掌握底層原理,且在舊版本環境或特殊定制場景下仍具參考價值。本文提供一個功能完整、考慮邊界情況的 FileOperateDemo 工具類,支援檔案與目錄的遞歸處理、覆蓋控制、同源檢測等實用特性。
copyGeneralFile(src, dest) 自動判斷來源是檔案還是目錄,委派給對應處理邏輯。overwriteExistFile 參數控制是否覆蓋同名檔案。deleteFile(path) 僅刪除單層檔案或空目錄,非遞歸刪除,較安全。cutGeneralFile 組合「複製成功 + 刪除來源」實現原子性移動。// 1. 防止來源與目標路徑相同導致無限遞歸或資料覆蓋
if (destFile.getAbsolutePath().equals(srcFile.getAbsolutePath())) return false;
// 2. 目標目錄不存在時自動建立(mkdirs)
File destFileDir = new File(destDir);
if (!destFileDir.exists() && !destFileDir.mkdirs()) return false;
// 3. 目錄複製時檢測「目標是否包含於來源」以防循環
if (destDir.contains(srcPath)) return false;
// 4. 流關閉採用 try-catch-finally 確保資源釋放(JDK 7+ 建議改用 try-with-resources)
main 方法展示了豐富的測試用例:正常複製、來源不存在、同目錄複製、覆蓋與不覆蓋模式、目標目錄無法建立、目錄遞歸複製、刪除操作等,可直接作為驗收標準。
生產環境建議優先使用 java.nio.file.Files:
// 檔案複製(支援原子移動、屬性保留)
Files.copy(srcPath, destPath, StandardCopyOption.REPLACE_EXISTING);
// 目錄遞歸複製需配合 Files.walkFileTree
// 移動:Files.move(src, dest, StandardCopyOption.ATOMIC_MOVE)
但本範例的流式處理邏輯、邊界檢查思路在自定義加密、壓縮、異步複製等擴展場景下仍具啟發意義。