[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-i-o-nio-kak-rabotat-s-faylami-i-katalogami-cherez-files-api":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},684,"kak-rabotat-s-faylami-i-katalogami-cherez-files-api",15,"i-o-nio","I\u002FO & NIO","📁","Как работать с файлами и каталогами через Files API?","Класс `java.nio.file.Files` предоставляет исчерпывающий набор статических методов для работы с файлами и каталогами, покрывающий все основные сценарии: чтение, запись, копирование, удаление, создание каталогов, обход дерева и проверку атрибутов.\n\n### Чтение и запись файлов\n\n\u003Cdetails>\u003Csummary>Примеры чтения и записи\u003C\u002Fsummary>\n\n```java\nPath path = Path.of(\"example.txt\");\n\n\u002F\u002F Запись строки в файл (Java 11+)\nFiles.writeString(path, \"Привет, мир!\\nВторая строка.\", StandardCharsets.UTF_8);\n\n\u002F\u002F Запись списка строк\nFiles.write(path, List.of(\"строка 1\", \"строка 2\"), StandardCharsets.UTF_8);\n\n\u002F\u002F Дозапись в файл\nFiles.writeString(path, \"\\nДополнение\",\n    StandardCharsets.UTF_8, StandardOpenOption.APPEND);\n\n\u002F\u002F Чтение всего содержимого (Java 11+)\nString content = Files.readString(path, StandardCharsets.UTF_8);\n\n\u002F\u002F Чтение построчно в список\nList\u003CString> lines = Files.readAllLines(path, StandardCharsets.UTF_8);\n\n\u002F\u002F Ленивое чтение через Stream (для больших файлов)\ntry (Stream\u003CString> stream = Files.lines(path)) {\n    stream.filter(l -> l.contains(\"ERROR\")).forEach(System.out::println);\n}\n```\n\n\u003C\u002Fdetails>\n\n### Копирование, перемещение и удаление\n\n\u003Cdetails>\u003Csummary>Примеры операций с файлами\u003C\u002Fsummary>\n\n```java\nPath source = Path.of(\"source.txt\");\nPath target = Path.of(\"backup\u002Fsource_copy.txt\");\n\n\u002F\u002F Копирование с заменой существующего\nFiles.copy(source, target, StandardCopyOption.REPLACE_EXISTING);\n\n\u002F\u002F Копирование из InputStream в файл\ntry (InputStream is = new URL(\"https:\u002F\u002Fexample.com\u002Ffile.txt\").openStream()) {\n    Files.copy(is, target, StandardCopyOption.REPLACE_EXISTING);\n}\n\n\u002F\u002F Атомарное перемещение\nFiles.move(source, target, StandardCopyOption.ATOMIC_MOVE);\n\n\u002F\u002F Удаление\nFiles.delete(path);              \u002F\u002F бросает NoSuchFileException\nFiles.deleteIfExists(path);      \u002F\u002F возвращает false\n```\n\n\u003C\u002Fdetails>\n\n### Создание каталогов и временных файлов\n\n```java\nFiles.createDirectory(Path.of(\"new_dir\"));          \u002F\u002F один каталог\nFiles.createDirectories(Path.of(\"a\u002Fb\u002Fc\u002Fd\"));        \u002F\u002F вложенные (mkdir -p)\nPath tempFile = Files.createTempFile(\"prefix_\", \".tmp\");\nPath tempDir = Files.createTempDirectory(\"my_temp_\");\n```\n\n### Обход дерева каталогов\n\n\u003Cdetails>\u003Csummary>Примеры обхода\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Files.list — только первый уровень\ntry (Stream\u003CPath> stream = Files.list(Path.of(\"src\"))) {\n    stream.filter(Files::isRegularFile).forEach(System.out::println);\n}\n\n\u002F\u002F Files.walk — рекурсивный обход\ntry (Stream\u003CPath> stream = Files.walk(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 Files.walkFileTree — продвинутый обход (например, рекурсивное удаление)\nFiles.walkFileTree(Path.of(\"dir_to_delete\"), new SimpleFileVisitor\u003C>() {\n    @Override\n    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)\n            throws IOException {\n        Files.delete(file);\n        return FileVisitResult.CONTINUE;\n    }\n    @Override\n    public FileVisitResult postVisitDirectory(Path dir, IOException exc)\n            throws IOException {\n        Files.delete(dir);\n        return FileVisitResult.CONTINUE;\n    }\n});\n```\n\n\u003C\u002Fdetails>\n\n### Проверка свойств файлов\n\n```java\nboolean exists = Files.exists(path);\nboolean isFile = Files.isRegularFile(path);\nboolean isDir = Files.isDirectory(path);\nboolean isLink = Files.isSymbolicLink(path);\nlong size = Files.size(path);\nString mimeType = Files.probeContentType(path); \u002F\u002F \"text\u002Fplain\"\n```\n\n### Важное\n\n- Все методы `Files`, возвращающие `Stream` (`list()`, `walk()`, `find()`, `lines()`), требуют `try-with-resources`.\n- `Files.createDirectories()` не бросает исключение, если каталог уже существует.\n- `DirectoryStream` — это `Iterable`, а не `Stream` из Java 8.\n- Для рекурсивного удаления каталога необходим обход через `walkFileTree` — `Files.delete()` не удаляет непустой каталог.\n\n> **На собеседовании:** продемонстрируйте знание основных операций: чтение\u002Fзапись, обход дерева, копирование\u002Fперемещение. Упомяните обязательность `try-with-resources` для Stream-методов и невозможность удалить непустой каталог одним вызовом.","","middle",[15,16,17,18],"core","file","nio","io",[],null,{"title":22,"description":23,"ogTitle":24,"ogDescription":25,"keywords":26,"schemaAnswer":39,"featuredSnippetReady":40},"Files API: работа с файлами и каталогами — Gymterview","java.nio.file.Files: чтение, запись, копирование, удаление, обход дерева каталогов, создание директорий. Примеры readString, walk, walkFileTree.","Files API в Java — работа с файлами и каталогами — Gymterview","Полный обзор Files API: чтение\u002Fзапись, копирование\u002Fперемещение, обход дерева, создание каталогов.",[27,28,29,30,31,32,33,34,35,36,37,38],"Files API","java.nio.file.Files","readString","writeString","walk","walkFileTree","copy","move","delete","createDirectories","Java NIO.2","собеседование","Files предоставляет статические методы: чтение (readString, readAllLines, lines), запись (writeString, write), копирование\u002Fперемещение (copy, move с StandardCopyOption), удаление (delete, deleteIfExists), создание каталогов (createDirectories), обход дерева (walk, walkFileTree, list, find). Stream-методы (lines, walk, list) требуют try-with-resources. Files.delete не удаляет непустой каталог.",true]