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

Java FTP 工具類封裝:上傳、下載、列表、刪除、目錄創建完整實現

     編輯:Java 綜合教學

Java FTP 工具類封裝:上傳、下載、列表、刪除、目錄創建完整實現

基於 Apache Commons Net FTPClient 封裝的生產級工具類,支援編碼處理、被動模式、流式傳輸、目錄遞歸創建。

核心功能

  • uploadFile():單文件上傳(緩衝流)
  • sendFile():流式上傳(大文件、進度監控)
  • downFile():單文件下載
  • list():目錄列表(過濾 . .. Thumbs.db)
  • deleteFile():遞歸刪除目錄及文件
  • buildList():遞歸創建遠程目錄路徑
  • hasSubFolder():判斷目錄是否有子目錄

關鍵實現細節

編碼處理

public static final String PLATFORM_CHARSET = "GB2312"; // 或 UTF-8
String remotePath = new String(localPath.getBytes(PLATFORM_CHARSET), "ISO-8859-1");

FTP 協議默認 ISO-8859-1,雙向轉換避免中文亂碼。

被動模式與二進制傳輸

ftp.enterLocalPassiveMode(); // 防火牆友好
ftp.setFileType(FTPClient.BINARY_FILE_TYPE); // 圖片/文檔不損壞

流式上傳支援進度

OutputStream os = ftp.storeFileStream(remoteName);
byte[] buffer = new byte[ftp.getBufferSize()];
int n; long transferred = 0;
while ((n = input.read(buffer)) != -1) {
    os.write(buffer);
    transferred += n;
    // 可回調進度
}
os.close(); // 必須關閉流完成傳輸

目錄遞歸創建

public static void buildList(FTPClient ftp, String path) throws IOException {
    StringTokenizer st = new StringTokenizer(path, "/");
    StringBuilder dir = new StringBuilder();
    while (st.hasMoreTokens()) {
        dir.append("/").append(st.nextToken());
        String d = dir.toString();
        if (d.startsWith("/")) d = d.substring(1);
        ftp.makeDirectory(d); // 已存在會拋異常,生產環境需捕獲忽略
    }
}

完整代碼

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import java.io.*;
import java.util.*;

public class FTPUtil {
    public static final String PLATFORM_CHARSET = "GB2312";

    // uploadFile, sendFile, downFile, list, deleteFile, buildList, hasSubFolder
    // 見上方核心功能與關鍵實現細節
}

Maven 依賴

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.8.0</version>
</dependency>

生產環境建議

  • 連接池化(PoolingFTPClient)避免頻繁建連
  • 超時設置:setConnectTimeout()/setDefaultTimeout()
  • 異常重試機制、傳輸校驗(MD5/CRC32)
  • SFTP 場景改用 JSch/Apache MINA SSHD
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved