Creating and Reading Directories
Some of the methods previously discussed, such as delete , work on files, links and directories. But how do you list all the directories at the top of a file system? How do you list the contents of a directory or create a directory?
This section covers the following functionality specific to directories:
Listing a File System's Root Directories
You can list all the root directories for a file system by using the FileSystem.getRootDirectories method. This method returns an Iterable , which enables you to use the enhanced for statement to iterate over all the root directories.
The following code snippet prints the root directories for the default file system:
Creating a Directory
You can create a new directory by using the createDirectory(Path, FileAttribute<?>) method. If you don't specify any FileAttributes , the new directory will have default attributes. For example:
The following code snippet creates a new directory on a POSIX file system that has specific permissions:
To create a directory several levels deep when one or more of the parent directories might not yet exist, you can use the convenience method, createDirectories(Path, FileAttribute<?>) . As with the createDirectory(Path, FileAttribute<?>) method, you can specify an optional set of initial file attributes. The following code snippet uses default attributes:
The directories are created, as needed, from the top down. In the foo/bar/test example, if the foo directory does not exist, it is created. Next, the bar directory is created, if needed, and, finally, the test directory is created.
It is possible for this method to fail after creating some, but not all, of the parent directories.
Creating a Temporary Directory
You can create a temporary directory using one of createTempDirectory methods:
- createTempDirectory(Path, String, FileAttribute<?>. )
- createTempDirectory(String, FileAttribute<?>. )
The first method allows the code to specify a location for the temporary directory and the second method creates a new directory in the default temporary-file directory.
Listing a Directory's Contents
You can list all the contents of a directory by using the newDirectoryStream(Path) method. This method returns an object that implements the DirectoryStream interface. The class that implements the DirectoryStream interface also implements Iterable , so you can iterate through the directory stream, reading all of the objects. This approach scales well to very large directories.
The following code snippet shows how to print the contents of a directory:
The Path objects returned by the iterator are the names of the entries resolved against the directory. So, if you are listing the contents of the /tmp directory, the entries are returned with the form /tmp/a , /tmp/b , and so on.
This method returns the entire contents of a directory: files, links, subdirectories, and hidden files. If you want to be more selective about the contents that are retrieved, you can use one of the other newDirectoryStream methods, as described later in this page.
Note that if there is an exception during directory iteration then DirectoryIteratorException is thrown with the IOException as the cause. Iterator methods cannot throw exception exceptions.
Filtering a Directory Listing By Using Globbing
If you want to fetch only files and subdirectories where each name matches a particular pattern, you can do so by using the newDirectoryStream(Path, String) method, which provides a built-in glob filter. If you are not familiar with glob syntax, see What Is a Glob?
For example, the following code snippet lists files relating to Java: .class, .java, and .jar files.:
Writing Your Own Directory Filter
Perhaps you want to filter the contents of a directory based on some condition other than pattern matching. You can create your own filter by implementing the DirectoryStream.Filter<T> interface. This interface consists of one method, accept , which determines whether a file fulfills the search requirement.
For example, the following code snippet implements a filter that retrieves only directories:
Once the filter has been created, it can be invoked by using the newDirectoryStream(Path, DirectoryStream.Filter<? super Path>) method. The following code snippet uses the isDirectory filter to print only the directory's subdirectories to standard output:
This method is used to filter a single directory only. However, if you want to find all the subdirectories in a file tree, you would use the mechanism for Walking the File Tree.
Как создать директорию в java

Класс File, определенный в пакете java.io, не работает напрямую с потоками. Его задачей является управление информацией о файлах и каталогах. Хотя на уровне операционной системы файлы и каталоги отличаются, но в Java они описываются одним классом File.
В зависимости от того, что должен представлять объект File — файл или каталог, мы можем использовать один из конструкторов для создания объекта:
Класс File имеет ряд методов, которые позволяют управлять файлами и каталогами. Рассмотрим некоторые из них:
boolean createNewFile() : создает новый файл по пути, который передан в конструктор. В случае удачного создания возвращает true, иначе false
boolean delete() : удаляет каталог или файл по пути, который передан в конструктор. При удачном удалении возвращает true.
boolean exists() : проверяет, существует ли по указанному в конструкторе пути файл или каталог. И если файл или каталог существует, то возвращает true, иначе возвращает false
String getAbsolutePath() : возвращает абсолютный путь для пути, переданного в конструктор объекта
String getName() : возвращает краткое имя файла или каталога
String getParent() : возвращает имя родительского каталога
boolean isDirectory() : возвращает значение true, если по указанному пути располагается каталог
boolean isFile() : возвращает значение true, если по указанному пути находится файл
boolean isHidden() : возвращает значение true, если каталог или файл являются скрытыми
long length() : возвращает размер файла в байтах
long lastModified() : возвращает время последнего изменения файла или каталога. Значение представляет количество миллисекунд, прошедших с начала эпохи Unix
String[] list() : возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге
File[] listFiles() : возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге
boolean mkdir() : создает новый каталог и при удачном создании возвращает значение true
boolean renameTo(File dest) : переименовывает файл или каталог
Работа с каталогами
Если объект File представляет каталог, то его метод isDirectory() возвращает true . И поэтому мы можем получить его содержимое — вложенные подкаталоги и файлы с помощью методов list() и listFiles() . Получим все подкаталоги и файлы в определенном каталоге:
Теперь выполним еще ряд операций с каталогами, как удаление, переименование и создание:
Работа с файлами
Работа с файлами аналогична работе с каталога. Например, получим данные по одному из файлов и создадим еще один файл:
При создании нового файла метод createNewFile() в случае неудачи выбрасывает исключение IOException , поэтому нам надо его отлавливать, например, в блоке try. catch, как делается в примере выше.
Создать каталог на Java
Каталог — это расположение или структура каталогизации файловой системы для хранения файлов на вашем компьютере. Мы работаем с различными операциями обработки файлов на Java. Файловый объект используется для создания новой папки или каталога.
Please enable JavaScript
В этом руководстве мы создадим каталог на Java.
Используйте функцию mkdir() для создания каталогов в Java
Сначала создается экземпляр класса файла. Затем этому экземпляру передается параметр — путь к каталогу, который мы хотим создать. Наконец, с помощью файлового объекта вызывается метод mkdir() , создавая требуемый каталог.
Используйте функцию mkdirs() для создания каталогов в Java
Недостатком метода mkdir() является то, что Java может использовать его только для создания одного каталога за раз. Этот недостаток устраняется использованием метода mkdirs() , так как мы можем использовать его для создания иерархии каталогов. то есть подкаталоги внутри родительского каталога и так далее.
С помощью метода mkdirs() внутри родительского каталога TestDirectory создается TestDirectory1. Это невозможно сделать с помощью метода mkdir() .
Используйте функцию createDirectory() для создания каталогов в Java
Files.createDirectory() также может создать новый каталог в Java. FileAlreadyExistsException выбрасывается, если файл с таким именем уже существует.
Если каталог уже существует, код выдаст следующий результат.
Приведенный выше код выбросит NoSuchFileException в случае, если иерархия не существует.
Работа с файлами в Java

Чтобы работать с файлами, есть шикарный утилитный класс — java.nio.file.Files . У него есть методы просто на все случаи жизни. Все методы этого класса статические и работают с объектами типа Path. Методов очень много, поэтому мы рассмотрим только основные:
| Метод | Описание |
|---|---|
| Создает новый файл с путем path | |
| Создает новую директорию | |
| Создает несколько директорий | |
| Создает временный файл | |
| Создает временную директорию | |
| Удаляет файл или директорию, если она пуста | |
| Копирует файл | |
| Перемещает файл | |
| Проверяет, что путь — это директория, а не файл | |
| Проверяет, что путь — это файл, а не директория | |
| Проверяет, что объект по заданному пути существует | |
| Возвращает размер файла | |
| Возвращает все содержимое файла в виде массива байт | |
| Возвращает все содержимое файла в виде строки | |
| Возвращает все содержимое файла в виде списка строк | |
| Записывает в файл массив байт | |
| Записывает в файл строку | |
| Возвращает коллекцию файлов (и поддиректорий) из заданной директории |
2. Создание файлов и директорий
Файлы и директории создавать очень просто. Убедимся на примерах:
| Код | Примечание |
|---|---|
| Создает файл | |
| Создает директорию | |
| Создает директорию и все нужные поддиректории, если их не существует. |
3. Копирование, перемещение и удаление
Копировать, перемещать и удалять файлы так же легко. На директории это тоже распространяется, но они должны быть пустые.
| Код | Примечание |
|---|---|
| Копирует файл | |
| Перемещает и переименовывает файл | |
| Удаляет файл |
4. Проверка типа файла и факта существования
Когда у вас есть какой-то путь, полученный извне, вы бы хотели знать, это файл или директория. Ну и вообще: существует такой файл/директория или нет?
Для этого тоже есть специальные методы. Так же можно легко узнать длину файла:
| Код | Примечание |
|---|
5. Работа с содержимым файла
И наконец, есть целая серия методов, которые позволяют легко прочитать или записать содержимое файла. Пример:
6. Получение содержимого директории
Остался еще самый интересный метод — получение файлов и поддиректорий в заданной директории.
Для этого есть специальный метод — newDirectoryStream() , который возвращает специальный объект типа DirectoryStream<Path> . У него есть итератор(!), и с помощью этого итератора можно получить все файлы и поддиректории заданной директории.
Выглядит проще, чем кажется:
Объект DirectoryStream<Path> обладает двумя свойствами. Во-первых, у него есть итератор, который возвращает пути к файлам, и мы можем этот объект использовать внутри цикла for-each .
А во-вторых, этот объект является потоком данных, и его нужно закрывать с помощью метода close() , ну или использовать внутри try -with-resources.