【发布时间】:2021-10-08 03:19:54
【问题描述】:
我有一个包含以下文件列表的目录。
- 测试
- 测试(1)
- 测试(2)
- test_x.log
- test_x(1).log
在上面的列表中,test(1) 和 test(2) 是原始测试文件的副本。
我想通过提供文件名来获取文件列表(及其副本)。
例如: -输入:测试 -输出列表应包含: - 测试 --测试(1) --test(2)
该列表不应包含 test_x.log 或其副本。根据列表,我应该找到文件副本的最后一次迭代,并从原始测试文件创建一个新的文件副本,如 test(3)。
下面的代码也给出了 test_x.log。尝试使用包含和一些正则表达式模式。没有成功。
String filePath = "C:\\TestFolder";
String finalFileName = "test";
List<File> files = Files.list(Paths.get(filePath))
.filter(Files::isRegularFile)
.filter(path -> path.getFileName().toString().startsWith(finalFileName))
.sorted()
.map(Path::toFile)
.collect(Collectors.toList());
【问题讨论】:
-
文件名通常有扩展名。出于您的目的,我们是否假设没有扩展?如果是这样,那么
path.getFileName().toString().matches('test(?:\(\d+\))?')应该这样做。请参阅regex101.com/r/PFwLCI/1 并注意.matches()方法添加了开始和结束行锚点。