一、所需jar
<dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version></dependency>
二、工具类
import java.io.*;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class FTPBulkFileDownloader {public static void downloadFiles(String server, int port, String user, String pass, String remoteDir, String saveDir, String keyword) throws IOException {FTPClient ftpClient = new FTPClient();try {ftpClient.connect(server, port);ftpClient.login(user, pass);ftpClient.enterLocalPassiveMode();ftpClient.setFileType(FTP.BINARY_FILE_TYPE);List<String> filesToDownload = getFilesToDownload(ftpClient, remoteDir, keyword);for (String file : filesToDownload) {String remoteFilePath = remoteDir + "/" + file;String saveFilePath = saveDir + File.separator + file;downloadFile(ftpClient, remoteFilePath, saveFilePath);}} finally {if (ftpClient.isConnected()) {ftpClient.logout();ftpClient.disconnect();}}}private static List<String> getFilesToDownload(FTPClient ftpClient, String remoteDir, String keyword) throws IOException {List<String> filesToDownload = new ArrayList<>();FTPFile[] files = ftpClient.listFiles(remoteDir);for (FTPFile file : files) {if (file.isFile() && file.getName().contains(keyword)) {filesToDownload.add(file.getName());}}return filesToDownload;}private static void downloadFile(FTPClient ftpClient, String remoteFilePath, String saveFilePath) throws IOException {InputStream inputStream = ftpClient.retrieveFileStream(remoteFilePath);BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);FileOutputStream fileOutputStream = null;try {fileOutputStream = new FileOutputStream(saveFilePath);int bytesRead;byte[] buffer = new byte[1024];while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {fileOutputStream.write(buffer, 0, bytesRead);}System.out.println("File downloaded: " + saveFilePath);} finally {if (bufferedInputStream != null) {bufferedInputStream.close();}if (fileOutputStream != null) {fileOutputStream.close();}ftpClient.completePendingCommand();}}public static void main(String[] args) {String server = "FTPIP";//FTP端口int port = 21;//用户名String user = "";//密码String pass = "";//FTP文件目录String remoteDir = "/FTP";//本地文件存放目录String saveDir = "/local";//关键字String keyword = "222";try {downloadFiles(server, port, user, pass, remoteDir, saveDir, keyword);} catch (IOException e) {e.printStackTrace();}}
}