我有一个目录,其中包含这样的文件:
users_20221104.txt
users_20221105.txt
users_20221106.txt
dealers_20221104.txt
dealers_20221105.txt
dealers_20221106.txt
nations_20221104.txt
nations_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
类上的方法,例如 split
和 replace
。
将日期部分解析为
LocalDate
。使用预定义的格式化程序来解析标准 ISO 8601 格式的“基本”(压缩)版本。
LocalDate ld = LocalDate.parse( input , DateTimeFormatter.BASIC_ISO_DATE ) ;
使用自然顺序比较日期,即
isBefore
、isAfter
和 isEqual
。循环时记住哪个文件具有最新日期。
一种干净的方法是创建一个
Compartor
并通过使用相应的前缀对其进行初始化来将其与流一起使用。
演示:
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));
}
}
输出:
users_20221106.txt
dealers_20221106.txt
nations_20221106.txt
了解有关现代日期时间 API 的更多信息