FTPUtils
工具类应用场景
场景:需要在Java程序中实现FTP文件的上传、下载、删除等操作时,可以使用FTPUtils工具类来简化操作。
作用:
- 实现FTP文件的上传:通过FTPUtils工具类,可以将本地文件上传到FTP服务器。
- 实现FTP文件的下载:通过FTPUtils工具类,可以将FTP服务器上的文件下载到本地。
- 实现FTP文件的删除:通过FTPUtils工具类,可以删除FTP服务器上的文件。
- 实现FTP文件夹的创建:通过FTPUtils工具类,可以在FTP服务器上创建文件夹。
- 实现FTP文件夹的删除:通过FTPUtils工具类,可以删除FTP服务器上的文件夹。
- 实现FTP文件夹的遍历:通过FTPUtils工具类,可以获取FTP服务器上指定目录下的所有文件和文件夹。
- 实现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;
}
}
工具类功能概述:
-
连接与断开:提供了
connect()
和disconnect()
方法,用于连接和断开 FTP 服务器。工具类自动处理连接时的被动模式和登录验证。 -
上传文件:通过
uploadFile()
方法实现本地文件上传到远程 FTP 服务器,支持二进制文件上传。 -
下载文件:通过
downloadFile()
方法将远程服务器上的文件下载到本地,支持
二进制文件下载。
-
删除文件:提供
deleteFile()
方法,用于删除 FTP 服务器上的文件。 -
列出文件:通过
listFiles()
方法获取 FTP 服务器上指定目录的文件列表。 -
切换工作目录:可以通过
changeWorkingDirectory()
切换 FTP 服务器上的当前工作目录。 -
创建和删除目录:支持在 FTP 服务器上创建新目录(
makeDirectory()
)和删除目录(removeDirectory()
)。 -
重命名文件:通过
renameFile()
实现文件重命名功能。 -
文件存在性检查:
exists()
方法用于检查 FTP 服务器上的文件或目录是否存在。
使用说明:
-
依赖:确保项目中已经引入 Apache Commons Net 库的依赖。
-
实例化工具类:创建
FTPUtils
实例并连接服务器,调用相应的方法进行操作。
总结:
Java-FTP操作工具类(FTPUtils)是一个用于操作FTP服务器的工具类。它封装了一系列常用的FTP操作方法,使得在Java程序中操作FTP服务器变得简单且方便。
FTPUtils提供了以下主要功能:
-
连接到FTP服务器:通过调用
connect
方法,传入FTP服务器的IP地址、端口号、用户名和密码,即可建立与FTP服务器的连接。 -
上传文件到FTP服务器:通过调用
uploadFile
方法,传入本地文件路径和远程文件路径,即可将本地文件上传到FTP服务器。 -
下载文件从FTP服务器:通过调用
downloadFile
方法,传入远程文件路径和本地文件路径,即可将FTP服务器上的文件下载到本地。 -
删除FTP服务器上的文件:通过调用
deleteFile
方法,传入远程文件路径,即可删除FTP服务器上的文件。 -
创建FTP服务器上的目录:通过调用
createDirectory
方法,传入目录路径,即可在FTP服务器上创建对应的目录。 -
删除FTP服务器上的目录:通过调用
deleteDirectory
方法,传入目录路径,即可删除FTP服务器上的目录。 -
列出FTP服务器上的文件和目录:通过调用
listFiles
方法,传入目录路径,即可列出FTP服务器上的文件和目录。