簡體   English   中英

如何根據文件名中的日期獲取最新文件?

[英]How do I get the most recent file based on a date in the filename?

我有一個包含如下文件的目錄:{users_20221104.txt | 用戶_20221105.txt | users_20221106.txt

經銷商_20221104.txt | 經銷商_20221105.txt | 經銷商_20221106.txt |

國家_20221104.txt | 國家_20221105.txt | nations_20221106.txt }

我只需要檢索每次出現的最后一個文件,這意味着 users_20221106、dealers_20221106 和 nations_20221106

目前我有這樣的事情:

    private void downloadFiles()  {
        List<String> filesPath = ftpClient.listFiles(ftpFolderIn);
        String usersFileTxt = null;
        String dealerFileTxt = null;
        String nationFileTxt = null;
        
        for (String filepath : filesPath) {
            if (filepath.contains("users")) {
                usersFileTxt = filepath;
            }
            if (filepath.contains("dealers")) {
                dealerFileTxt = filepath;
            }
            if (filepath.contains("nations")) {
                nationFileTxt = filepath;
            }
        }
        usersFile = ftpClient.downloadFile(usersFileTxt);
        dealerFile = ftpClient.downloadFile(dealerFileTxt);
        nationFile = ftpClient.downloadFile(nationFileTxt);
    }

遍歷你的文件名。

提取日期部分。 一種方法是對String class 使用方法,例如splitreplace

將日期部分解析為LocalDate 使用預定義的格式化程序來解析標准 ISO 8601 格式的“基本”(壓縮)版本。

LocalDate ld = LocalDate.parse( input , DateTimeFormatter.BASIC_ISO_DATE ) ;

使用自然順序將日期與isBeforeisAfterisEqual進行比較。 在循環時記住哪個文件具有最新日期。

一種干凈的方法是創建一個Compartor並通過使用相應的前綴初始化它來將其與 stream 一起使用。

演示

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;

class FilesComparator implements Comparator<String> {
    private String prefix;

    FilesComparator(String prefix) {
        this.prefix = prefix;
    }

    @Override
    public int compare(String s1, String s2) {
        DateTimeFormatter parser = DateTimeFormatter.ofPattern("'" + prefix + "'uuuuMMdd'.txt'");
        LocalDate ldt1 = LocalDate.parse(s1, parser);
        LocalDate ldt2 = LocalDate.parse(s2, parser);
        return ldt1.compareTo(ldt2);
    }
}

public class Main {
    public static void main(String[] args) {
        List<String> files = List.of(
                "users_20221104.txt", "users_20221106.txt", "users_20221105.txt",
                "dealers_20221104.txt", "dealers_20221106.txt", "dealers_20221105.txt",
                "nations_20221104.txt", "nations_20221106.txt", "nations_20221105.txt");

        String usersFileTxt = getLatestFile(files, "users_").get();
        System.out.println(usersFileTxt);

        String dealersFileTxt = getLatestFile(files, "dealers_").get();
        System.out.println(dealersFileTxt);

        String nationsFileTxt = getLatestFile(files, "nations_").get();
        System.out.println(nationsFileTxt);
    }

    static Optional<String> getLatestFile(List<String> files, String prefix) {
        return files.stream()
                .filter(filename -> filename.startsWith(prefix))
                .max(new FilesComparator(prefix));
    }
}

Output :

users_20221106.txt
dealers_20221106.txt
nations_20221106.txt

Trail 了解有關現代日期時間 API 的更多信息:日期時間

暫無
暫無

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

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