我的文件夹名称是以下格式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();
}
我建议:
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
。你不需要这些来实现基本的想法,我只是喜欢用这种方式编写代码。如果您需要帮助从您不想要的内容中过滤出您想要的内容,请在评论中进行跟进。