FTP文件 - FileListFilter只获取最新文件

时间:2017-02-24 11:30:36

标签: java spring filter ftp spring-integration

我试图实现这样的事情:

Arrays.sort(files, new Comparator<File>(){
    public int compare(File f1, File f2)
    {
        return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
    } });

问题是我有FTPFile而不是FileFTPFile只有getTimestamp()。

如何根据修改日期实施过滤器以仅下载最新文件?

或者我如何调整我展示的使用FTPFile代替File的示例?

看起来应该是这样的:

public class NewestFileOnlyFilter implements FileListFilter<FTPFile> {
    //logic to return only the newest file.
}

3 个答案:

答案 0 :(得分:1)

以下是你如何做到这一点:

public class NewestFileOnlyFilter implements FileListFilter<FTPFile> {

  @Override
  public List<FTPFile> filterFiles(FTPFile[] files) {
    return Arrays.stream(files)                                         // 1
                 .max(Comparator.comparing(FTPFile::getTimestamp))      // 2
                 .map(Collections::singletonList)                       // 3
                 .orElse(Collections.emptyList());                      // 4
  }
}

对参考线的一些澄清:

  1. 以流的形式表示数组以简化其进一步处理;
  2. 主要步骤:

    • 使用max方法搜索流的最大元素;
    • 使用带有max;
    • 的比较器提供Comparator.comparing方法
    • 为比较器提供一个函数,该函数返回用于比较的密钥 - getTimestamp在这种情况下,我们按照修改时间比较文件。
  3. 将搜索结果(具有最大时间戳的文件)包装到包含单个元素(如果有)的列表中;

  4. 否则返回空列表。
    这不太可能在FileListFilter内发生,但我们仍然处理这种情况。

答案 1 :(得分:0)

时间戳 (通常)上次修改时间 - 请参阅javadocs ...

/***
 * Returns the file timestamp.  This usually the last modification time.
 *
 * @return A Calendar instance representing the file timestamp.
 ***/
public Calendar getTimestamp()

Calendar实施Comparable

答案 2 :(得分:0)

你可以这样做:

public int compare(File f1, File f2)
{
        Calendar dateOfmyFile=f1.getTimestamp();
        Date dateF1 =  dateOfmyFile.getTime();
        dateOfmyFile=f2.getTimestamp();
        Date dateF2 = dateOfmyFile.getTime();
        long difference = dateF1-dateF2;
        if(difference<0)
          return dateF2;
        else 
          return dateF1;
}