一、maven依赖
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.11.1</version>
</dependency>
二、工具类
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.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FtpUtils {
private static FTPClient ftpClient = null;
private String user;
private String password;
private String host;
private int port;
public FtpUtils() {
}
public FtpUtils(String host, int port, String user, String password) {
this.user = user;
this.password = password;
this.host = host;
this.port = port;
}
public FTPClient connect() {
ftpClient = new FTPClient();
try {
ftpClient.connect(host, port);
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
throw new IOException("FTP server refused connection.");
}
if (!ftpClient.login(user, password)) {
ftpClient.logout();
throw new IOException("Failed to login to FTP server.");
}
} catch (IOException e) {
e.printStackTrace();
}
return ftpClient;
}
public void close() {
try {
if (ftpClient != null && ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public List<String> filesList(String dirPath) {
FTPFile[] files = new FTPFile[0];
try {
ftpClient.changeWorkingDirectory(dirPath);
files = ftpClient.listFiles(dirPath);
} catch (IOException e) {
e.printStackTrace();
}
return Arrays.stream(files).map(FTPFile::getName).collect(Collectors.toList());
}
public void downloadFile(String source, String destination) {
try(FileOutputStream out = new FileOutputStream(destination)) {
ftpClient.retrieveFile(source, out);
} catch (IOException e) {
e.printStackTrace();
}
}
public void uploadFile(String path, File file) {
try (FileInputStream in = new FileInputStream(file)) {
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.storeFile(path, in);
} catch (IOException e) {
e.printStackTrace();
}
}
public void deleteFile(String filePath) {
try {
ftpClient.deleteFile(filePath);
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean createDir(String dirPath) {
try {
String[] dirs = dirPath.split("/");
ftpClient.changeWorkingDirectory("/");
StringBuilder path = new StringBuilder("/");
for (String dir : dirs) {
if (dir == null || dir.isEmpty()) {
continue;
}
path.append(dir).append("/");
if (!ftpClient.changeWorkingDirectory(path.toString())) {
if (!ftpClient.makeDirectory(path.toString())) {
return false;
}
ftpClient.changeWorkingDirectory(path.toString());
}
}
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
}
三、测试
1.获取文件夹下的所有文件名
FtpUtils ftpClient = new FtpUtils("127.0.0.1", 21, "root", "123qaz");
ftpClient.connect();
List<String> files = ftpClient.filesList("/root/test/");
ftpClient.close();
2.下载文件
FtpUtils ftpClient = new FtpUtils("127.0.0.1", 21, "root", "123qaz");
ftpClient.connect();
ftpClient.downloadFile("/root/local/data/my.sql", "C:\\Users\\haitang\\Downloads\\downloaded.sql");
ftpClient.close();
3.上传文件
FtpUtils ftpClient = new FtpUtils("127.0.0.1", 21, "root", "123qaz");
ftpClient.connect();
File file = new File("C:\\Users\\haitang\\Downloads\\qaz.sql");
ftpClient.uploadFile("/root/local/test/buz.sql",file );
ftpClient.close();
4.删除文件
FtpUtils ftpClient = new FtpUtils("127.0.0.1", 21, "root", "123qaz");
ftpClient.connect();
ftpClient.deleteFile("/root/local/data/test.txt" );
ftpClient.close();
5.创建文件夹
FtpUtils ftpClient = new FtpUtils("127.0.0.1", 21, "root", "123qaz");
ftpClient.connect();
ftpClient.createDir("/test/local/java/" );
ftpClient.close();