Вы можете использовать java.nio
классы в сочетании с Java 8 stream
. Класс Files
содержит метод walk
, который будет проходить через файлы и каталоги.
Path root = Paths.get("/path/to/root");
boolean result = Files.walk(root)
.filter(Files::isRegularFile)
.anyMatch(p -> p.endsWith("a.txt"));
Обратите внимание, что endsWith
сопоставляет полное имя файла, если файл называется bla.txt
, он не будет сопоставлен.
Если вам нужно найти файл, вы можете сделать следующее:
Optional<Path> result = Files.walk(root)
.filter(Files::isRegularFile)
.filter(p -> p.endsWith("a.txt"))
.findAny();
if (result.isPresent()) {
// do something with the file
} else {
// whoopsie, not found
}
Если вы хотите найти несколько файлов, вы можете сделать следующее:
List<Path> result = Files.walk(root)
.filter(Files::isRegularFile)
.filter(p -> p.endsWith("a.txt"))
.collect(Collectors.toList());
if (!result.isEmpty()) {
... do smth with the paths
} else {
... whoopsie, not found
}
Вы также можете обработать найденные файлы напрямую, если хотите:
Files.walk(root)
.filter(Files::isRegularFile)
.filter(p -> p.endsWith("a.txt"))
.forEach(this::process);
private void process(Path path) {
// do smth with the path
}
...