如何在java中找到基于文件夹名称的最新文件夹,格式为20180828_021335

问题描述 投票:0回答:1

我的文件夹名称是以下格式yyyyMMdd_HHmmss我的输出是

20180828_021335
20180828_021330
20170828_011330
20180828_1211330

如何创建正则表达式以在java中查找最新的文件夹名称(最新创建的文件夹)

我写了下面的代码,但它显示基于lastModified的文件夹名称,但我希望得到基于文件夹名称的文件夹名称即将来临的yyyyMMdd_HHmmss格式。我希望正则表达式根据文件夹名称搜索最新的文件夹

String getLatestFolderPath(String path) {
    File dir = new File(path);
    File max = null;
    for (File file : dir.listFiles()) {
         if (file.isDirectory()
                 && (max == null || max.lastModified() < file.lastModified())) {
             max = file;
         }
    }
    return max.toString();
}
java file directory
1个回答
0
投票

我建议:

public static Optional<String> getLatestFolderPath(String dirPathName) throws IOException {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuuMMdd_HHmmss");
    Path dirPath = Paths.get(dirPathName);
    Optional<Path> op = Files.list(dirPath)
            .filter(Files::isDirectory)
            .max(Comparator.comparing(p 
                    -> LocalDateTime.parse(p.getFileName().toString(), formatter)));
    return op.map(Path::toString);
}

恕我直言,正则表达式在你的任务中没有位置。相反,我正在将文件名中的日期和时间解析为LocalDateTime并选择最新的。这也可以验证您的文件名。实际上,由于最后一个示例目录的数字太多,它将导致java.time.format.DateTimeParseException: Text '20180828_1211330' could not be parsed, unparsed text found at index 15

我正在使用一些现代的东西,如现代文件API,流API和Optional。你不需要这些来实现基本的想法,我只是喜欢用这种方式编写代码。如果您需要帮助从您不想要的内容中过滤出您想要的内容,请在评论中进行跟进。

© www.soinside.com 2019 - 2024. All rights reserved.