get latest file from ftp(从 ftp 获取最新文件)
问题描述
尝试创建一个简单的插件,它可以简单地连接到一个 ftp 站点,查找最新的文件然后下载它.但是,它没有获取最新的文件.
Trying to create a simple plugin that simply connects to an ftp site, looks up the latest file and then downloads it. However, it isn't getting the latest file.
我正在使用 org.apache.commons.net.ftp.ftpclient 处理一切.
I'm using the org.apache.commons.net.ftp.ftpclient for everything.
这是我的代码
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 比较文件修改日期,或者任何人都可以指出我做错了什么的方向.谢谢.
It's getting the list of files, and then returning a file, it just isn't the latest file. Is there any other way to compare file modification dates using FTPClient or can anyone point me in a direction on what I'm doing wrong. Thanks.
推荐答案
我将创建一个比较器,而不是您的lastFileModified"方法.写排序方法会更容易:
Instead of your "lastFileModified" method, I would create a Comparator. It would be easier to write the sort method:
public class LastModifiedComparator implements Comparator<FTPFile> {
public int compare(FTPFile f1, FTPFile f2) {
return f1.getTimestamp().compareTo(f2.getTimeStamp());
}
}
那么,获取最后一个"FTPFile 就容易多了:
Then, getting the "last" FTPFile is much easier:
public FTPFile getMaxLastModified(FTPFile[] ftpFiles) {
return Collections.max(Arrays.asList(ftpFiles), new LastModifiedComparator());
}
<小时>
回到您的问题:lastModified"时间戳未链接到 FTP 上传顺序.当您通过 FTP 协议上传文件时,可能会保留文件的原始时间戳.
To come back to your problem: the "lastModified" timestamp is not linked to the FTP upload order. When you upload a file through the FTP protocol, the original timestamp of the file may be preserved.
因此,如果 file1 早于 file2,您的方法将始终返回 file2,即使 file2 在 FTP 服务器上的 file1 之前上传也是如此.
So, if file1 is older than file2, your method will always return file2, even if file2 is uploaded before file1 on the FTP server.
我认为不可能确定最后上传的文件.FTP 协议不存储此信息.只有当您重载 FTP 客户端的put"方法时,您才能这样做:
I think that it is impossible to determine the last uploaded file. This information is not stored by the FTP protocol. You can do that only if you overload the "put" method of your FTP client:
public void put(File file) {
// upload code
FTPFile ftpFile = getJustUploadedFile(file);
ftpFile.setTimestamp(new Calendar()); // Now!
}
这篇关于从 ftp 获取最新文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从 ftp 获取最新文件
- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- C++ 和 Java 进程之间的共享内存 2022-01-01
- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01
- 从 finally 块返回时 Java 的奇怪行为 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01
- Eclipse 插件更新错误日志在哪里? 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01