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