从ftp获取最新文件

尝试创建一个简单的插件,只需连接到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 { 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协议上载文件时,可能会保留文件的原始时间戳。

因此,如果file1比file2旧,则即使file2在FTP服务器上的file1之前上载,您的方法也将始终返回file2。

我认为无法确定上次上传的文件。 FTP协议不存储此信息。 只有在重载FTP客户端的“put”方法时才能这样做:

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

我只看到一个错误:

 FTPFile choice = null; 

如果第一个文件是最新的修改文件,则该方法将返回null ,从而导致潜在的NullPointerException

将其更改为

 FTPFile choice = files[0]; 

逻辑应该是正确的。

如果它仍然没有返回预期的文件,则很可能该文件根本没有预期的最后修改日期。 在方法中的for循环中添加类似这样的内容:

 System.out.println(file.getTimestamp().getTime() + " - " + file.getName()); 

仔细看看。