【问题标题】:FTP File - FileListFilter get only the newest fileFTP 文件 - FileListFilter 只获取最新的文件
【发布时间】:2017-02-24 11:30:35
【问题描述】:

我正在尝试实现这样的东西:

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

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

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

或者如何调整我展示的示例以使用 FTPFile 而不是 File

它必须看起来像这样:

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

【问题讨论】:

    标签: java spring filter ftp spring-integration


    【解决方案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方法搜索流的最大元素;
      • 提供带有Comparator.comparing的比较器的max方法;
      • 为比较器提供一个函数,该函数返回用于比较的键 - 在本例中为 getTimestamp,因为我们按修改时间比较文件。
    3. 将搜索结果(具有最大时间戳的文件)包装到具有单个元素(如果有)的列表中;

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

    【讨论】:

      【解决方案2】:

      时间戳(通常)最后修改时间 - 请参阅 javadocs...

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

      Calendar 实现Comparable

      【讨论】:

        【解决方案3】:

        你可以这样做:

        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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-16
          • 1970-01-01
          相关资源
          最近更新 更多