- Файлы и директории, класс File
- Примеры создания объектов File
- Свойства и методы класса File
- Интерфейс FileFilter
- Пример использования фильтра FileFilter
- Чтение содержимого файла FileInputStream
- Запись в файл FileOutputStream
- Работа с файловой системой
- Чтение и сохранение файлов
- Java: Список файлов в каталоге
- Вступление
- Файл.список()
- Фильтр имен файлов
- Файл.listFiles()
- Файлы.прогулка()
- Git Essentials
- Вывод
- File, Files, Path
Файлы и директории, класс File
Класс File пакета java.io используется для управления информацией о файлах и каталогах. На уровне операционной системы файлы и каталоги имеют существенные отличия, но в Java они описываются одним классом File. Каталог в Java трактуется как обычный файл, но с дополнительным свойством — списком имен файлов, который можно просмотреть с помощью метода list.
В зависимости от назначения объект File — файл или каталог, можно использовать один из конструкторов для создания объекта:
Примеры создания объектов File
Свойства и методы класса File
Для определения стандартных свойств файла в классе File имеются различные методы. Однако класс File несимметричен, т.е. методы определения свойств объекта существуют, но соответствующие функции для изменения этих свойств отсутствуют.
Функции | Описание |
---|---|
String getName() | Наименование файла или каталога. |
String getParent() | Наименование родительского каталога. |
long length() | Функция определения размера файла в байтах. |
String getAbsolutePath() | Функция определения абсолютного пути файла или каталога. |
boolean delete() | Удаления файла или каталога. |
boolean exists() | Проверка существования файла или каталога. |
boolean isDirectory() | Проверка, является ли данный объект каталогом. |
boolean isFile() | Проверка, является ли данный объект файлом. |
long lastModified() | Функция определения даты последней модификации файла. |
boolean canRead() | Проверка, можно ли читать данные из файла. |
boolean canWrite() | Проверка, можно ли записывать данные в файл. |
boolean isHidden() | Проверка, являются ли каталог или файл скрытыми. |
String[] list() | Чтение массива наименований файлов и подкаталогов. |
File[] listFiles() | Чтение массива файлов и подкаталогов. |
boolean mkdir() | Создание нового каталога. |
boolean renameTo(File dest) | Переименовывание файла или каталога. |
В следующем примере открываем файл «d:/test/MyFile.txt» (Windows) и извлекаем его характеристики:
В консоли будет отпечатана следующая информация:
Интерфейс FileFilter
Класс File включает метод, позволяющий прочитать список только определенных файлов.
В отличие от одноименного метода, но без параметра, данный метод отбирает только те файлы каталога, которые удовлетворяют определенному условию. Параметр filter предназначен для задания этого условия. При этом тип параметра FileFilter — это не класс, а интерфейс, который имеет всего один метод, возвращающий true, если файл удовлетворяет определенным условиям, и false в противном случае.
Метод listFiles будет вызывать метод accept для каждого файла в каталоге, и те, для которых accept вернет true, будут включены в результирующий список. Остальные будут проигнорированы.
Для использования FileFilter необходимо создать объект и определить в нем соответствующий метод accept.
Пример использования фильтра FileFilter
Чтение содержимого файла FileInputStream
Для чтения содержимого файла можно использовать класс FileInputStream, который является наследником класса InputStream и реализует все его методы. Конструктор класса FileInputStream :
Если файл не может быть открыт то генерируется исключение FileNotFoundException.
Пример считывания данных из файла и вывод содержимого в консоль:
Данные файла можно считать в массив байтов :
Класс FileInputStream предназначен прежде всего для работы с двоичными файлами. Его можно использовать для работы с текстовыми файлами, но все же для этой задачи больше подходят другие классы.
Пример использования FileInputStream для чтения файла свойств в кодировке UTF-8:
Файл свойств «data.properties» в кодировке UTF-8:
Запись в файл FileOutputStream
Класс FileOutputStream, является производным от класса OutputStream, поэтому наследует всю его функциональность.
Пример записи строки в файл:
Для создания объекта FileOutputStream используется конструктор, принимающий в качестве параметра путь к файлу для записи. Для записи строки ее сначала переводим в массив байт и с помощью метода write строка записывается в файл. Необязательно записывать весь массив байтов. Используя перегрузку метода write(), можно записать и одиночный байт:
Пример перезаписи содержимого из одного файла в другой:
Класс FileOutputStream предназначен прежде всего для записи двоичных файлов. Его можно использовать для работы с текстовыми файлами, но все же для этой задачи больше подходят другие классы.
Источник
Работа с файловой системой
Чтение и сохранение файлов
Работа с настройками уровня activity и приложения позволяет сохранить небольшие данные отдельных типов (string, int), но для работы с большими массивами данных, такими как графически файлы, файлы мультимедиа и т.д., нам придется обращаться к файловой системе.
ОС Android построена на основе Linux. Этот факт находит свое отражение в работе с файлами. Так, в путях к файлам в качестве разграничителя в Linux использует слеш «/», а не обратный слеш «\» (как в Windows). А все названия файлов и каталогов являются регистрозависимыми, то есть «data» это не то же самое, что и «Data».
Приложение Android сохраняет свои данные в каталоге /data/data/ / и, как правило, относительно этого каталога будет идти работа.
Для работы с файлами абстрактный класс android.content.Context определяет ряд методов:
boolean deleteFile (String name) : удаляет определенный файл
String[] fileList () : получает все файлы, которые содержатся в подкаталоге /files в каталоге приложения
File getCacheDir() : получает ссылку на подкаталог cache в каталоге приложения
File getDir(String dirName, int mode) : получает ссылку на подкаталог в каталоге приложения, если такого подкаталога нет, то он создается
File getExternalCacheDir() : получает ссылку на папку /cache внешней файловой системы устройства
File getExternalFilesDir(String type) : получает ссылку на каталог /files внешней файловой системы устройства
File getFileStreamPath(String filename) : возвращает абсолютный путь к файлу в файловой системе
FileInputStream openFileInput(String filename) : открывает файл для чтения
FileOutputStream openFileOutput (String name, int mode) : открывает файл для записи
Все файлы, которые создаются и редактируются в приложении, как правило, хранятся в подкаталоге /files в каталоге приложения.
Для непосредственного чтения и записи файлов применяются также стандартные классы Java из пакета java.io.
Итак, применим функционал чтения-записи файлов в приложении. Пусть у нас будет следующая примитивная разметка layout:
Поле EditText предназначено для ввода текста, а TextView — для вывода ранее сохраненного текста. Для сохранения и восстановления текста добавлены две кнопки.
Теперь в коде Activity пропишем обработчики кнопок с сохранением и чтением файла:
При нажатии на кнопку сохранения будет создаваться поток вывода FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE)
В данном случае введенный текст будет сохраняться в файл «content.txt». При этом будет использоваться режим MODE_PRIVATE
Система позволяет создавать файлы с двумя разными режимами:
MODE_PRIVATE : файлы могут быть доступны только владельцу приложения (режим по умолчанию)
MODE_APPEND : данные могут быть добавлены в конец файла
Поэтому в данном случае если файл «content.txt» уже существует, то он будет перезаписан. Если же нам надо было дописать файл, тогда надо было бы использовать режим MODE_APPEND:
Для чтения файла применяется поток ввода FileInputStream :
Подробнее про использование потоков ввода-вывода можно прочитать в руководстве по Java: https://metanit.com/java/tutorial/6.3.php
В итоге после нажатия кнопки сохранения весь текст будет сохранен в файле /data/data/название_пакета/files/content.txt
Где физически находится созданный файл? Чтобы увидеть его на подключенном устройстве перейдем в Android Stud в меню к пункту View -> Tool Windows -> Device File Explorer
После этого откроектся окно Device File Explorer для просмотра файловой системы устройства. И в папке data/data/[название_пакета_приложения]/files мы сможем найти сохраненный файл.
Источник
Java: Список файлов в каталоге
Автор: Marko Petrović
Дата записи
Вступление
Многие приложения каким-то образом обрабатывают файлы, и манипулирование файлами является одним из основных знаний на любом языке программирования.
Чтобы манипулировать файлами, нам нужно знать, где они находятся. Наличие обзора файлов в каталоге имеет первостепенное значение, если мы хотим этого добиться, особенно если мы можем выполнять операции с ними с помощью итерации. В Java есть несколько способов сделать это, которые мы покажем в этой статье.
Для простоты все примеры будут написаны для следующего дерева файлов:
Файл.список()
Самым простым методом для перечисления имен файлов и папок в заданном каталоге без обхода подкаталогов является вспомогательный метод .list () , который возвращает массив String s.
Мы делаем это с помощью метода .list() в экземпляре Файла :
Используя простой цикл для каждого , мы перебираем массив и выводим Строку s.
При использовании этого подхода все элементы в каталоге Кодирование музыки не отображаются, и недостатком этого подхода является то, что мы действительно ничего не можем сделать с самими файлами. Мы только узнаем их имена. Это полезно, когда мы просто хотим взглянуть на файлы по номиналу.
Фильтр имен файлов
Еще одна вещь, которую мы можем сделать с помощью метода .list () , – это создать Фильтр имен файлов для возврата только тех файлов, которые мы хотим:
Запуск этого фрагмента кода приведет к:
Файл.listFiles()
Подобно предыдущему методу, этот метод можно использовать для возврата имен файлов и каталогов, но на этот раз мы получаем их в виде массива объектов File , что дает нам возможность напрямую манипулировать ими:
Теперь давайте углубимся в файловую систему, используя рекурсию и еще несколько методов для использования с Файлом объектом:
Файлы.прогулка()
В Java 8 и более поздних версиях мы можем использовать файл java.nio.Файлы класс для заполнения потока и использования его для просмотра файлов и каталогов и в то же время рекурсивного обхода всех подкаталогов.
Обратите внимание, что в этом примере мы будем использовать лямбда-выражения:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Здесь мы заполнили Поток , используя метод .walk () , передав аргумент Пути|/. Класс Пути состоит из статических методов , которые возвращают Путь на основе строкового URI — и, используя Путь , мы можем легко найти файл.
Путь , Пути , Файлы и многие другие классы принадлежат пакету java.nio , который был представлен в Java 7 как более современный способ представления файлов неблокирующим способом.
Затем с помощью Collections Framework создается список.
Запуск этого фрагмента кода приведет к:
Вывод
Обработка файлов каким-либо образом является основной задачей для большинства языков программирования, и это включает в себя возможность перечислять и находить файлы в файловой системе. Чтобы манипулировать файлами, нам нужно знать, где они находятся. Наличие обзора файлов в каталоге имеет первостепенное значение, если мы хотим этого добиться, особенно если мы можем выполнять операции с ними с помощью итерации.
В этой статье мы показали несколько различных способов в Java перечисления файлов в файловой системе, используя как линейный, так и рекурсивный подходы.
Источник
File, Files, Path
— Привет, Амиго. Давно не виделись.
— Привет, Билаабо. О чем будешь рассказывать?
— Сегодня я расскажу о работе с файлами. В Java есть специальный класс (File), с помощью которого можно управлять файлами на диске компьютера. Для того чтобы управлять содержимым файлов, есть другие классы: FileInputStream, FileOutputStream,…
— Интересно. А когда ты говоришь «управлять файлами», что ты имеешь в виду?
— Как раз сейчас и расскажу. Файлы можно создавать, удалять, переименовывать и еще много чего. Практически во все классы, которые работают (читают, пишут, изменяют) с содержимым файла, можно передавать объект класса File. Пример:
— Но во втором случае длиннее же получается. Так и не понял – зачем эти файлы нужны.
— Для этого конкретного случая – да. Это не пример, как надо делать, а скорее – как можно.
Но вот представь, что тебе нужно вывести на экран список всех файлов, которые находятся в определенной директории (папке). Вот как это можно сделать с помощью файлов:
— listFiles() – это метод, который возвращает список файлов в папке с именем «c:/path/»?
— Да. Хотя программисты обычно говорят «директория» или «каталог». Название «папка» стало употребляться совсем недавно, но, в принципе, они все верные, и ты можешь говорить, как тебе удобнее.
— Ок. А getName() что делает? Выдает имя файла? И какое именно имя? Полное вместе с путем или только имя самого файла?
— Только имя самого файла. Для полного есть file.getAbsolutePath()
— А какие еще методы есть у класса File?
Метод | Описание |
---|---|
boolean isDirectory() | Является ли «объект файла» директорией |
boolean isFile() | Является ли объект файлом |
long length() | Возвращает размер/длину файла в байтах. |
boolean createNewFile() | Создает файл. Если такой файл уже был, возвращает false. |
boolean mkdir() | Создает директорию. Название mkdir происходит от «make directory». |
boolean mkdirs() | Создает директорию и все поддиректории. |
boolean delete() | Удаляет файл объекта на диске. Если объект – директория, то только, если в ней нет файлов. |
void deleteOnExit() | Добавляет файл в специальный список файлов, которые будут автоматически удалены при закрытии программы. |
File createTempFile( String prefix, String suffix, File directory) | Создает «временный файл» — файл с случайно сгенерированным уникальным именем – что-типа «dasd4d53sd». Дополнительные параметры – префикс к имени, суффикс (окончание). Если директория не указана, то файл создается в специальной директории ОС для временных файлов |
boolean exists() | Возвращает true, если файл с таким именем существует на диске компьютера. |
String getAbsolutePath() | Возвращает полный путь файла со всеми поддиректориями. |
String getCanonicalPath() | Возвращает канонический путь файла. Например, преобразовывает путь «c:/dir/dir2/../a.txt» к пути «c:/dir/a.txt» |
String[] list() | Возвращает массив имен файлов, которые содержатся в директории, которой является текущий объект-файл. |
File[] listFiles() | Возвращает массив файлов, которые содержатся в директории, которой является текущий объект-файл. |
long getTotalSpace() | Возвращает размер диска (количество байт) на котором расположен файл. |
long getFreeSpace() | Возвращает количество свободного места (количество байт) на диске, на котором расположен файл. |
boolean renameTo(File) | Переименовывает файл – содержимое файла фактически получает новое имя. Т.е. можно переименовать файл «c:/dir/a.txt» в «d:/out/text/b.doc». |
String getName() | Возвращает только имя файла, без пути. |
String getParent() | Возвращает только путь (директорию) к текущему файлу, без самого имени. |
Path toPath() | Возвращает объект Path, который соответствует текущему объекту File. |
— Ничего себе! А немаленький такой список получился. Да и вроде, можно довольно много сделать с помощью него: создавать, удалять файлы, переименовывать,…
А чтобы получить директорию текущего файла, надо вызвать getParent()?
— Ага, но он вернет не объект-файл, а строку – путь к файлу. Фактически у класса File почти все методы дублированы: одна версия возвращает String, вторая File. Вот смотри:
Если у тебя есть строка с путем к файлу, а надо объект File, то воспользуйся конструктором. Если же наоборот – есть объект File, а нужна строка – используй getAbsolutePath(). Пример:
— Отлично. Тогда вот тебе маленькое задание – выведи имена всех файлов, которые есть в той же директории, что и текущий файл.
— Нет ничего проще, вот, смотри:
— А то! Немного путает, что и для файла и для директории используется один и тот же класс – File. Как то это не очень логично, мне кажется.
— Так исторически сложилось. Раньше директория была специальным «пустым» файлом на диске. Сейчас уже, конечно, многое изменилось, но не везде. У меня на сегодня все.
Источник