java-FTP 操作工具类(FTPUtils)

FTPUtils 工具类应用场景

    场景:需要在Java程序中实现FTP文件的上传、下载、删除等操作时,可以使用FTPUtils工具类来简化操作。

作用:

  1. 实现FTP文件的上传:通过FTPUtils工具类,可以将本地文件上传到FTP服务器。
  2. 实现FTP文件的下载:通过FTPUtils工具类,可以将FTP服务器上的文件下载到本地。
  3. 实现FTP文件的删除:通过FTPUtils工具类,可以删除FTP服务器上的文件。
  4. 实现FTP文件夹的创建:通过FTPUtils工具类,可以在FTP服务器上创建文件夹。
  5. 实现FTP文件夹的删除:通过FTPUtils工具类,可以删除FTP服务器上的文件夹。
  6. 实现FTP文件夹的遍历:通过FTPUtils工具类,可以获取FTP服务器上指定目录下的所有文件和文件夹。
  7. 实现FTP文件的重命名:通过FTPUtils工具类,可以将FTP服务器上的文件重命名。

FTPUtils 工具类添加依赖

要使用该类,你需要先添加依赖库:

<!-- 添加 Apache Commons Net 依赖 -->
<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.8.0</version>
</dependency>

FTPUtils 工具类

package com.example.ftp;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * FTP工具类,封装了FTP文件的上传、下载、删除、列出文件等常见操作。
 */
public class FTPUtils {

    private static final Logger LOGGER = Logger.getLogger(FTPUtils.class.getName());
    private FTPClient ftpClient;
    private String server;
    private int port;
    private String user;
    private String password;

    /**
     * 构造函数,初始化FTP连接信息。
     *
     * @param server   FTP服务器地址
     * @param port     FTP端口号
     * @param user     FTP用户名
     * @param password FTP密码
     */
    public FTPUtils(String server, int port, String user, String password) {
        this.server = server;
        this.port = port;
        this.user = user;
        this.password = password;
        this.ftpClient = new FTPClient();
    }

    /**
     * 连接到FTP服务器。
     *
     * @throws IOException 如果连接失败抛出异常
     */
    public void connect() throws IOException {
        ftpClient.connect(server, port);
        int replyCode = ftpClient.getReplyCode();
        if (!FTPReply.isPositiveCompletion(replyCode)) {
            throw new IOException("无法连接到FTP服务器,回复码: " + replyCode);
        }
        boolean success = ftpClient.login(user, password);
        if (!success) {
            throw new IOException("FTP登录失败,请检查用户名和密码。");
        }
        ftpClient.enterLocalPassiveMode();  // 切换到被动模式
        LOGGER.info("成功连接到FTP服务器 " + server + ",端口: " + port);
    }

    /**
     * 断开与FTP服务器的连接。
     *
     * @throws IOException 如果断开失败抛出异常
     */
    public void disconnect() throws IOException {
        if (ftpClient.isConnected()) {
            ftpClient.logout();
            ftpClient.disconnect();
            LOGGER.info("成功断开与FTP服务器的连接。");
        }
    }

    /**
     * 上传文件到FTP服务器的指定目录。
     *
     * @param localFilePath 本地文件路径
     * @param remoteFilePath 远程文件路径
     * @return 上传是否成功
     * @throws IOException 如果上传失败抛出异常
     */
    public boolean uploadFile(String localFilePath, String remoteFilePath) throws IOException {
        try (InputStream inputStream = new FileInputStream(new File(localFilePath))) {
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            boolean done = ftpClient.storeFile(remoteFilePath, inputStream);
            if (done) {
                LOGGER.info("文件上传成功: " + localFilePath + " -> " + remoteFilePath);
                return true;
            } else {
                LOGGER.warning("文件上传失败: " + localFilePath + " -> " + remoteFilePath);
                return false;
            }
        }
    }

    /**
     * 从FTP服务器下载文件。
     *
     * @param remoteFilePath 远程文件路径
     * @param localFilePath  本地保存路径
     * @return 下载是否成功
     * @throws IOException 如果下载失败抛出异常
     */
    public boolean downloadFile(String remoteFilePath, String localFilePath) throws IOException {
        try (OutputStream outputStream = new FileOutputStream(new File(localFilePath))) {
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            boolean done = ftpClient.retrieveFile(remoteFilePath, outputStream);
            if (done) {
                LOGGER.info("文件下载成功: " + remoteFilePath + " -> " + localFilePath);
                return true;
            } else {
                LOGGER.warning("文件下载失败: " + remoteFilePath + " -> " + localFilePath);
                return false;
            }
        }
    }

    /**
     * 从FTP服务器删除文件。
     *
     * @param remoteFilePath 远程文件路径
     * @return 删除是否成功
     * @throws IOException 如果删除失败抛出异常
     */
    public boolean deleteFile(String remoteFilePath) throws IOException {
        boolean deleted = ftpClient.deleteFile(remoteFilePath);
        if (deleted) {
            LOGGER.info("文件删除成功: " + remoteFilePath);
            return true;
        } else {
            LOGGER.warning("文件删除失败: " + remoteFilePath);
            return false;
        }
    }

    /**
     * 列出FTP服务器指定目录下的所有文件和目录。
     *
     * @param remoteDirPath 远程目录路径
     * @return 文件列表
     * @throws IOException 如果列出文件失败抛出异常
     */
    public FTPFile[] listFiles(String remoteDirPath) throws IOException {
        FTPFile[] files = ftpClient.listFiles(remoteDirPath);
        if (files != null && files.length > 0) {
            LOGGER.info("列出目录成功: " + remoteDirPath);
        } else {
            LOGGER.warning("目录为空或列出目录失败: " + remoteDirPath);
        }
        return files;
    }

    /**
     * 切换工作目录。
     *
     * @param remoteDirPath 远程目录路径
     * @return 切换是否成功
     * @throws IOException 如果切换目录失败抛出异常
     */
    public boolean changeWorkingDirectory(String remoteDirPath) throws IOException {
        boolean success = ftpClient.changeWorkingDirectory(remoteDirPath);
        if (success) {
            LOGGER.info("成功切换到目录: " + remoteDirPath);
        } else {
            LOGGER.warning("无法切换到目录: " + remoteDirPath);
        }
        return success;
    }

    /**
     * 在FTP服务器上创建新目录。
     *
     * @param remoteDirPath 远程目录路径
     * @return 创建是否成功
     * @throws IOException 如果创建目录失败抛出异常
     */
    public boolean makeDirectory(String remoteDirPath) throws IOException {
        boolean created = ftpClient.makeDirectory(remoteDirPath);
        if (created) {
            LOGGER.info("成功创建目录: " + remoteDirPath);
        } else {
            LOGGER.warning("无法创建目录: " + remoteDirPath);
        }
        return created;
    }

    /**
     * 删除FTP服务器上的目录。
     *
     * @param remoteDirPath 远程目录路径
     * @return 删除是否成功
     * @throws IOException 如果删除目录失败抛出异常
     */
    public boolean removeDirectory(String remoteDirPath) throws IOException {
        boolean removed = ftpClient.removeDirectory(remoteDirPath);
        if (removed) {
            LOGGER.info("成功删除目录: " + remoteDirPath);
        } else {
            LOGGER.warning("无法删除目录: " + remoteDirPath);
        }
        return removed;
    }

    /**
     * 重命名远程文件。
     *
     * @param oldRemotePath 旧的远程文件路径
     * @param newRemotePath 新的远程文件路径
     * @return 重命名是否成功
     * @throws IOException 如果重命名失败抛出异常
     */
    public boolean renameFile(String oldRemotePath, String newRemotePath) throws IOException {
        boolean renamed = ftpClient.rename(oldRemotePath, newRemotePath);
        if (renamed) {
            LOGGER.info("文件重命名成功: " + oldRemotePath + " -> " + newRemotePath);
        } else {
            LOGGER.warning("文件重命名失败: " + oldRemotePath + " -> " + newRemotePath);
        }
        return renamed;
    }

    /**
     * 检查远程文件或目录是否存在。
     *
     * @param remotePath 远程文件或目录路径
     * @return 是否存在
     * @throws IOException 如果检查失败抛出异常
     */
    public boolean exists(String remotePath) throws IOException {
        FTPFile[] files = ftpClient.listFiles(remotePath);
        return files.length > 0;
    }
}

工具类功能概述:

  1. 连接与断开:提供了 connect()disconnect() 方法,用于连接和断开 FTP 服务器。工具类自动处理连接时的被动模式和登录验证。

  2. 上传文件:通过 uploadFile() 方法实现本地文件上传到远程 FTP 服务器,支持二进制文件上传。

  3. 下载文件:通过 downloadFile() 方法将远程服务器上的文件下载到本地,支持

二进制文件下载。

  1. 删除文件:提供 deleteFile() 方法,用于删除 FTP 服务器上的文件。

  2. 列出文件:通过 listFiles() 方法获取 FTP 服务器上指定目录的文件列表。

  3. 切换工作目录:可以通过 changeWorkingDirectory() 切换 FTP 服务器上的当前工作目录。

  4. 创建和删除目录:支持在 FTP 服务器上创建新目录(makeDirectory())和删除目录(removeDirectory())。

  5. 重命名文件:通过 renameFile() 实现文件重命名功能。

  6. 文件存在性检查exists() 方法用于检查 FTP 服务器上的文件或目录是否存在。

使用说明:

  1. 依赖:确保项目中已经引入 Apache Commons Net 库的依赖。

  2. 实例化工具类:创建 FTPUtils 实例并连接服务器,调用相应的方法进行操作。

总结:

Java-FTP操作工具类(FTPUtils)是一个用于操作FTP服务器的工具类。它封装了一系列常用的FTP操作方法,使得在Java程序中操作FTP服务器变得简单且方便。

FTPUtils提供了以下主要功能:

  1. 连接到FTP服务器:通过调用connect方法,传入FTP服务器的IP地址、端口号、用户名和密码,即可建立与FTP服务器的连接。

  2. 上传文件到FTP服务器:通过调用uploadFile方法,传入本地文件路径和远程文件路径,即可将本地文件上传到FTP服务器。

  3. 下载文件从FTP服务器:通过调用downloadFile方法,传入远程文件路径和本地文件路径,即可将FTP服务器上的文件下载到本地。

  4. 删除FTP服务器上的文件:通过调用deleteFile方法,传入远程文件路径,即可删除FTP服务器上的文件。

  5. 创建FTP服务器上的目录:通过调用createDirectory方法,传入目录路径,即可在FTP服务器上创建对应的目录。

  6. 删除FTP服务器上的目录:通过调用deleteDirectory方法,传入目录路径,即可删除FTP服务器上的目录。

  7. 列出FTP服务器上的文件和目录:通过调用listFiles方法,传入目录路径,即可列出FTP服务器上的文件和目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flying_Fish_Xuan

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值