java
复制代码
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();
}
}
}