一、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();