gpt4 book ai didi

java - 从 ftp 获取最新文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:49:27 26 4
gpt4 key购买 nike

尝试创建一个简单的插件,它可以简单地连接到一个 ftp 站点,查找最新文件,然后下载它。但是,它没有获取最新文件。

我正在使用 org.apache.commons.net.ftp.ftpclient 进行所有操作。

这是我的代码

public static void main(String[] args)
{
FTPClient client = new FTPClient();
try
{
client.connect(host);
client.login(user, pwd);
FTPFile[] files = client.listFiles();
FTPFile lastFile = lastFileModified(files);
System.out.println(lastFile.getName());
client.disconnect();
}
catch(SocketException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public static FTPFile lastFileModified(FTPFile[] files) {
Date lastMod = files[0].getTimestamp().getTime();
FTPFile choice = null;
for (FTPFile file : files) {
if (file.getTimestamp().getTime().after(lastMod)) {
choice = file;
lastMod = file.getTimestamp().getTime();
}
}
return choice;
}

它正在获取文件列表,然后返回一个文件,它只是不是最新的文件。有没有其他方法可以使用 FTPClient 比较文件修改日期,或者任何人都可以指出我做错了什么。谢谢。

最佳答案

我将创建一个比较器,而不是您的“lastFileModified”方法。编写排序方法会更容易:

public class LastModifiedComparator implements Comparator<FTPFile> {

public int compare(FTPFile f1, FTPFile f2) {
return f1.getTimestamp().compareTo(f2.getTimeStamp());
}
}

然后,获取“最后一个”FTPFile 就容易多了:

public FTPFile getMaxLastModified(FTPFile[] ftpFiles) {
return Collections.max(Arrays.asList(ftpFiles), new LastModifiedComparator());
}

回到您的问题:“lastModified”时间戳未链接到 FTP 上传顺序。当您通过 FTP 协议(protocol)上传文件时,文件的原始时间戳可能会被保留。

因此,如果 file1 早于 file2,您的方法将始终返回 file2,即使 file2 在 file1 之前上传到 FTP 服务器也是如此。

我认为无法确定最后上传的文件。 FTP 协议(protocol)不存储此信息。仅当重载 FTP 客户端的“put”方法时才能这样做:

public void put(File file) {
// upload code
FTPFile ftpFile = getJustUploadedFile(file);
ftpFile.setTimestamp(new Calendar()); // Now!
}

关于java - 从 ftp 获取最新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3824983/

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