添加依赖
// https://mvnrepository.com/artifact/commons-net/commons-net
compile group: 'commons-net', name: 'commons-net', version: '3.6'
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
代码示例
package com.xl;
import org.apache.commons.lang3.StringUtils;
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.*;
public class FTPTransFile {
private static final String sourceDir = "F:\\look.txt";//传输的源端目录
//destDir路径为搭建FTP服务器时设置的用户的主目录中的共享目录
//如果不是的话changeDir的结果会一直为false
private static final String destDir = "/pub";//传输的目的端目录
private static final String host = "192.168.0.101";//目的端的IP地址
private static final int port = 21; //目的端的端口号
private static final String userName = "ftpUser";//目的端的用户名
private static final String passWord = "1234";//目的端的密码
private static final String encoding = "UTF-8";
public static void main(String[] args) throws Exception {
//连接目的端
FTPClient ftpClient = connect(host, port, userName, passWord);
//文件上传
//uploadFile(ftpClient, sourceDir, destDir);
//文件下载
downloadFile(ftpClient, destDir, "look.txt", "F:\\look");
}
/**
* 连接目的端
*
* @param host 目的端IP地址
* @param port 目的端端口号
* @param userName 目的端FTP用户名
* @param passWord 目的端FTP密码
* @return 返回FTPClient
*/
public static FTPClient connect(String host, int port, String userName, String passWord) {
FTPClient ftpClient = new FTPClient();
try {
//设置文件传输的编码
ftpClient.setControlEncoding(encoding);
// 连接 FTP 服务器,如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftpClient.connect(host, port);// 连接FTP服务器
//登录 FTP 服务器
//如果传入的账号为空,则使用匿名登录,此时账号使用 "look",密码为空即可*/
if (StringUtils.isBlank(userName)) {
ftpClient.login("look", "");
} else {
ftpClient.login(userName, passWord);
}
//设置传输的文件类型
//BINARY_FILE_TYPE:二进制文件类型,ASCII_FILE_TYPE:ASCII传输方式,这是默认的方式
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
// 检验是否连接成功
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
//如果 FTP 服务器响应错误 中断传输、断开连接
//abort:中断文件正在进行的文件传输,成功时返回 true,否则返回 false
//disconnect:断开与服务器的连接,并恢复默认参数值
ftpClient.abort();
ftpClient.disconnect();
System.err.println("[" + reply + "]:连接失败!");
} else {
System.out.println("[" + reply + "]:连接成功!");
}
return ftpClient;
} catch (Exception e) {
return null;
}
}
/**
* 单个文件上传
*
* @param ftpClient FTP客户端
* @param sourceDir 传输的源端目录
* @param destDir 传输的目的端目录
*/
public static void uploadFile(FTPClient ftpClient, String sourceDir, String destDir) {
File file = null;
FileInputStream inputStream = null;
try {
// 转移工作目录至指定目录下
boolean changeDir = ftpClient.changeWorkingDirectory(destDir);
System.out.println("改变工作目录: " + changeDir);
if (changeDir) {
file = new File(sourceDir);
inputStream = new FileInputStream(file);
boolean result = ftpClient.storeFile(new String(file.getName().getBytes(encoding), "iso-8859-1"), inputStream);
if (result) {
System.out.println("文件上传成功: " + file.getName());
}
}
} catch (Exception e) {
System.err.println("文件上传失败!");
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 单个文件下载
*
* @param ftpClient FTP客户端
* @param destDir 待下载的目录
* @param fileName 待下载的文件名
* @param localPath 下载到本地的路径
*/
public static void downloadFile(FTPClient ftpClient, String destDir, String fileName, String localPath) {
OutputStream outputStream = null;
try {
// 转移到FTP服务器目录至指定的目录下
ftpClient.changeWorkingDirectory(new String(destDir.getBytes(encoding), "iso-8859-1"));
// 获取文件列表
FTPFile[] files = ftpClient.listFiles();
for (FTPFile ftpFile : files) {
//根据文件名判断文件是否需要下载
if (ftpFile.getName().equals(fileName)) {
File localFile = new File(localPath + "\\" + ftpFile.getName());
outputStream = new FileOutputStream(localFile);
boolean flag = ftpClient.retrieveFile(ftpFile.getName(), outputStream);
if (flag) {
System.out.println("文件下载成功: " + localPath + "\\" + ftpFile.getName());
}
}
}
} catch (IOException e) {
e.printStackTrace();
System.err.println("文件下载失败!");
} finally {
try {
outputStream.close();
ftpClient.logout();
ftpClient.disconnect();
} catch (IOException ioe) {
}
}
}
}