gpt4 book ai didi

java - 使用 Java Apache Commons Net 从匹配通配符的 FTP 下载文件

转载 作者:搜寻专家 更新时间:2023-11-01 03:16:22 30 4
gpt4 key购买 nike

基本上,我需要从 FTP 服务器下载用于搜索的匹配文件列表。我有从 FTP 服务器下载特定文件的代码。但是我需要使用通配符搜索来下载所有匹配的文件。这在 Java 中怎么可能?

这是从 FTP 服务器下载特定文件名的文件的代码 -

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class FTPDownloadFileDemowithoutmodandfilefilter {
public static void main(String[] args) {
String server = "test.rebex.net";
int port = 21;
String user = "demo";
String pass = "password";
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(server, port);
ftpClient.login(user, pass);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

File localFile = new File("C:\\project\\readme1.txt");
FTPFile remoteFile = ftpClient.mdtmFile("/readme.txt");
if (remoteFile != null)
{
OutputStream outputStream =
new BufferedOutputStream(new FileOutputStream(localFile));
if (ftpClient.retrieveFile(remoteFile.getName(), outputStream))
{
System.out.println("File downloaded successfully.");
}
outputStream.close();

localFile.setLastModified(remoteFile.getTimestamp().getTimeInMillis());
}

} catch (IOException ex) {
System.out.println("Error: " + ex.getMessage());
ex.printStackTrace();
} finally {
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}

}

最佳答案

使用FTPClient.mlistDir (推荐,如果服务器支持的话)或者 FTPClient.listFiles检索文件列表。然后根据您的需要过滤它们。

以下示例下载与正则表达式 .*\.jpg 匹配的所有文件:

FTPFile[] remoteFiles = ftpClient.listFiles(remotePath);

Pattern pattern = Pattern.compile(".*\\.jpg");
Stream<FTPFile> matchingFiles =
Arrays.stream(remoteFiles).filter(
(FTPFile remoteFile) -> pattern.matcher(remoteFile.getName()).matches());

for (Iterator<FTPFile> iter = matchingFiles.iterator(); iter.hasNext(); ) {
FTPFile remoteFile = iter.next();
System.out.println("Found file " + remoteFile.getName() + ", downloading ...");

File localFile = new File(localPath + "\\" + remoteFile.getName());

OutputStream outputStream =
new BufferedOutputStream(new FileOutputStream(localFile));
if (ftpClient.retrieveFile(remotePath + "/" + remoteFile.getName(), outputStream))
{
System.out.println(
"File " + remoteFile.getName() + " downloaded successfully.");
}
outputStream.close();
}

关于java - 使用 Java Apache Commons Net 从匹配通配符的 FTP 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49711631/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com