Как найти последнюю папку на основе имени папки в формате 20180828_021335 в Java - PullRequest
0 голосов
/ 29 августа 2018

имя моей папки будет в следующем формате ГГГГММДД_ЧЧММСС мой вывод

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

1 Ответ

0 голосов
/ 29 августа 2018

Я предлагаю:

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. Они не нужны для реализации основной идеи, я просто предпочел написать код таким образом. Если вам нужна помощь в отфильтровывании того, что вы хотите, от того, что вы не хотите, проследите за комментариями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...