1. Класс Files

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