[英]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
}
}
對參考行的一些澄清:
主要步驟:
max
方法搜索流的最大元素; Comparator.comparing
器提供max
方法; getTimestamp
,因為我們通過修改時間來比較文件。 將搜索結果(具有最大時間戳的文件)包裝到具有單個元素(如果有)的列表中;
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.