簡體   English   中英

FTP文件-FileListFilter僅獲取最新文件

[英]FTP File - FileListFilter get only the newest file

我正在嘗試實現這樣的事情:

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

這是您可以執行的操作:

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為Comparator.comparing器提供max方法;
    • 為比較器提供一個返回比較鍵的函數-在這種情況下為getTimestamp ,因為我們通過修改時間來比較文件。
  3. 將搜索結果(具有最大時間戳的文件)包裝到具有單個元素(如果有)的列表中;

  4. 否則返回空列表。
    FileListFilter不太可能發生這種情況,但是我們仍然可以處理這種情況。

時間戳 (一般)的最后修改時間-看到的javadoc ...

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

Calendar實現Comparable

你可以這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM