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

Apache Commons IO 文件操作工具類:複製、刪除、讀寫、追加完整封裝

     編輯:Java 相關知識

前言

JDK 原生 IO API 繁瑣且易出錯,Apache Commons IO 提供豐富工具方法。本文封裝 FileUtil 類別,統一處理檔案/目錄複製、刪除、字串寫入、內容讀取與追加寫入,並妥善處理編碼、父目錄自動建立、資源關閉等細節。

Maven 依賴

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.15.1</version>
</dependency>

FileUtil 完整原始碼


package com.pzq.io;

import org.apache.commons.io.FileUtils;
import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

public class FileUtil {

    /** 複製檔案或目錄到指定資料夾 */
    public static void copyFile(String srcPath, String destDir) throws IOException {
        File src = new File(srcPath);
        File dest = new File(destDir);
        if (src.isDirectory()) {
            FileUtils.copyDirectoryToDirectory(src, dest);
        } else if (src.isFile()) {
            FileUtils.copyFileToDirectory(src, dest);
        }
    }

    /** 刪除檔案或目錄(含子目錄) */
    public static void deleteFile(String targetPath) throws IOException {
        File target = new File(targetPath);
        if (target.isDirectory()) {
            FileUtils.deleteDirectory(target);
        } else if (target.isFile()) {
            if (!target.delete()) throw new IOException("刪除失敗:" + targetPath);
        }
    }

    /** 將字串寫入檔案(自動建立父目錄,UTF-8 編碼) */
    public static boolean string2File(String content, String filePath) throws IOException {
        File file = new File(filePath);
        if (!file.getParentFile().exists() && !file.getParentFile().mkdirs()) {
            throw new IOException("建立目錄失敗:" + file.getParentFile());
        }
        try (BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(new FileOutputStream(file), Charset.defaultCharset()));
             BufferedReader reader = new BufferedReader(new StringReader(content))) {
            char[] buf = new char[1024];
            int len;
            while ((len = reader.read(buf)) != -1) {
                writer.write(buf, 0, len);
            }
            writer.flush();
        }
        return true;
    }

    /** 讀取檔案所有行(UTF-8,自動處理換行符) */
    public static List<String> getContentFromFile(String filePath) throws IOException {
        File file = new File(filePath);
        if (!file.exists()) return new ArrayList<>();
        return FileUtils.readLines(file, Charset.defaultCharset());
    }

    /** 追加內容到檔案末尾 */
    public static void addContent(String filePath, List<String> lines) throws IOException {
        FileUtils.writeLines(new File(filePath), lines, true); // true = append
    }
}

關鍵方法對照表

需求Commons IO 方法備註
複製目錄copyDirectoryToDirectory保留目錄結構
複製檔案copyFileToDirectory目標為資料夾
刪除目錄deleteDirectory遞迴刪除
讀取所有行readLines(File, Charset)回傳 List<String>
寫入/追加行writeLines(File, Collection, boolean append)自動換行
檔案大小sizeOf(File)遞迴計算目錄大小
比對內容contentEquals(File, File)位元組級比對

最佳實踐提醒

  • 編碼明確指定:生產環境建議統一 StandardCharsets.UTF_8,避免跨平台亂碼。
  • 大檔案處理:超過記憶體限制時,改用 FileUtils.copyLargeFile 或串流分塊處理。
  • 例外處理:工具方法拋出 IOException,呼叫端統一捕獲並轉換為業務異常。
  • 單元測試:使用 TemporaryFolder (JUnit) 驗證複製、刪除、讀寫行為。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved