[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-i-o-nio-kak-vybrat-vse-elementy-opredelennogo-kataloga-po-kriteriyu":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":19,"progress":20,"seo":21},675,"kak-vybrat-vse-elementy-opredelennogo-kataloga-po-kriteriyu",15,"i-o-nio","I\u002FO & NIO","📁","Как выбрать все элементы определенного каталога по критерию?","Для выбора файлов по критерию (например, по расширению) используется метод `File.listFiles()` с передачей фильтра `FileFilter` или `FilenameFilter`.\n\n### Подход через java.io.File\n\n```java\nFile dir = new File(\"\u002Fproject\u002Fsrc\");\n\n\u002F\u002F Через FileFilter — все .java файлы\nFile[] javaFiles = dir.listFiles(f -> f.isFile() && f.getName().endsWith(\".java\"));\n\n\u002F\u002F Через FilenameFilter — по имени\nFile[] logs = dir.listFiles((d, name) -> name.endsWith(\".log\"));\n```\n\n### Подход через NIO.2 (рекомендуемый)\n\n```java\n\u002F\u002F DirectoryStream с glob-шаблоном\ntry (DirectoryStream\u003CPath> stream =\n        Files.newDirectoryStream(Path.of(\"\u002Fproject\u002Fsrc\"), \"*.java\")) {\n    for (Path entry : stream) {\n        System.out.println(entry.getFileName());\n    }\n}\n\n\u002F\u002F Stream API — Files.list() для одного уровня\ntry (Stream\u003CPath> stream = Files.list(Path.of(\"\u002Fproject\u002Fsrc\"))) {\n    List\u003CPath> javaFiles = stream\n        .filter(Files::isRegularFile)\n        .filter(p -> p.toString().endsWith(\".java\"))\n        .collect(Collectors.toList());\n}\n\n\u002F\u002F Stream API — Files.walk() для рекурсивного обхода\ntry (Stream\u003CPath> stream = Files.walk(Path.of(\"\u002Fproject\u002Fsrc\"))) {\n    List\u003CPath> allJava = stream\n        .filter(p -> p.toString().endsWith(\".java\"))\n        .collect(Collectors.toList());\n}\n```\n\nМетод `File.listFiles()` возвращает только элементы первого уровня каталога. Для рекурсивного обхода в классическом IO требовалась ручная рекурсия, тогда как NIO.2 предоставляет `Files.walk()` и `Files.walkFileTree()`.\n\n> **На собеседовании:** покажите решение через `listFiles(FileFilter)` и упомяните более современный подход через NIO.2 (`Files.list()`, `Files.walk()`). Обратите внимание на необходимость закрытия `Stream` через `try-with-resources`.","","junior",[15,16,17,18],"core","file","nio","io",[],null,{"title":22,"description":23,"ogTitle":24,"ogDescription":25,"keywords":26,"schemaAnswer":36,"featuredSnippetReady":37},"Фильтрация файлов каталога в Java — Gymterview","Как выбрать файлы по расширению или критерию: File.listFiles(FileFilter), Files.list(), Files.walk(), DirectoryStream. Примеры с лямбдами.","Фильтрация файлов каталога по критерию в Java — Gymterview","Подходы к фильтрации файлов: File.listFiles(FileFilter), NIO.2 Files.list(), Files.walk() с Stream API.",[27,28,29,30,31,32,33,34,35],"listFiles","FileFilter","FilenameFilter","Files.list","Files.walk","DirectoryStream","фильтрация файлов","Java","собеседование","Через java.io: File.listFiles(FileFilter) или File.listFiles(FilenameFilter) с лямбдой. Через NIO.2 (рекомендуемый): Files.newDirectoryStream(path, \"*.java\") с glob-шаблоном, Files.list(path) с filter() для одного уровня, Files.walk(path) для рекурсивного обхода. Stream от Files.list\u002Fwalk требует try-with-resources.",true]