- Класс File
- Методы класса File
- Каталог
- Список каталогов
- Метод listFiles()
- Файлы и директории, класс File
- Примеры создания объектов File
- Свойства и методы класса File
- Интерфейс FileFilter
- Пример использования фильтра FileFilter
- Чтение содержимого файла FileInputStream
- Запись в файл FileOutputStream
- Работа с файловой системой
- Чтение и сохранение файлов
- 19.6. Java — Класс File, его конструкторы и методы
- Содержание
- Конструкторы
- Методы
- Пример
Класс File
В отличие от большинства классов ввода/вывода, класс File работает не с потоками, а непосредственно с файлами. Данный класс позволяет получить информацию о файле: права доступа, время и дата создания, путь к каталогу. А также осуществлять навигацию по иерархиям подкаталогов.
Класс java.io.File может представлять имя определённого файла, а также имена группы файлов, находящихся в каталоге. Если класс представляет каталог, то его метод list() возвращает массив строк с именами всех файлов.
Для создания объектов класса File можно использовать один из следующих конструкторов.
- File(File dir, String name) — указывается объекта класса File (каталог) и имя файла
- File(String path) — указывается путь к файлу без указания имени файла
- File(String dirPath, Sring name) — указывается путь к файлу и имя файла
- File(URI uri) — указывается объекта URI, описывающий файл
Методы класса File
Класс File может использоваться для создания каталога или дерева каталогов. Также можно узнать свойства файлов (размер, дату последнего изменения, режим чтения/записи), определить к какому типу (файл или каталог) относится объект File, удалить файл. У класса очень много методов, перечислим некоторые.
- getAbsolutePath() — абсолютный путь файла, начиная с корня системы. В Android корневым элементом является символ слеша (/)
- canRead() — доступно для чтения
- canWrite() — доступно для записи
- exists() — файл существует или нет
- getName() — возвращает имя файла
- getParent() — возвращает имя родительского каталога
- getPath() — путь
- lastModified() — дата последнего изменения
- isFile() — объект является файлом, а не каталогом
- isDirectory — объект является каталогом
- isAbsolute() — возвращает true, если файл имеет абсолютный путь
- renameTo(File newPath) — переименовывает файл. В параметре указывается имя нового имени файла. Если переименование прошло неудачно, то возвращается false
- delete() — удаляет файл. Также можно удалить пустой каталог
Каталог
Каталог — это объект класса File, который содержит список других файлов и каталогов. После создания объекта класса File, являющего каталогом, его метод isDirectory() вернёт значение true. И тогда вы можете вызывать метод list().
Для создания каталога можно использовать метод mkdir(), который вернёт true в успешном случае. Если указанный путь уже существует или каталог нельзя создать из-за отсутствия полного пути к нему, то вернётся false.
Метод mkdirs() создаёт сам каталог, так и всех его родителей.
Список каталогов
Если вы хотите получить содержимое каталога, то можно вызвать метод list() без аргументов. Вам вернётся полный список (массив) имён файлов и каталогов, содержащихся в данном каталоге. Есть ещё похожий метод listFiles(), который возвращает массив файлов (объектов, а не их имён), о котором поговорим отдельно.
Если вам нужен только список файлов с расширением .java, то можно использовать специальный фильтр-класс, который описывает критерии отбора объектов File с помощью интерфейса FilenameFilter.
Интерфейс FilenameFilter определяет единственный метод accept(), вызываемый по одному разу с каждым файлом в списке.
Метод возвращает true для файлов каталога, указанного в dir, которые должны быть включены в список, и false — для файлов, которые следует исключить.
Метод listFiles()
Метод имеет несколько перегруженных версий. Он возвращает список файлов в виде массива объектов класса File. Одна из версий метода также использует интерфейс FilenameFilter. Другая версия использует интерфейс FileFilter и возвращает те файлы, путевые имена которых соответствует интерфейсу.
Пример использования методов класса File показан в уроке Файловый менеджер и в других примерах.
Источник
Файлы и директории, класс 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 мы сможем найти сохраненный файл.
Источник
19.6. Java — Класс File, его конструкторы и методы
В Java класс File представляет файлы и пути каталогов в абстрактной манере. Этот класс используется для создания, поиска, удаления файлов и каталогов и т.д.
Содержание
Конструкторы
File-объект представляет собой фактический файл или каталог на диске. Ниже приведен список конструкторов для создания file-объекта.
№ | Конструктор и описание |
1 | File(File parent, String child) Конструктор создает новый экземпляр файла из родительского абстрактного пути и строки дочернего пути. |
2 | File(String pathname) Конструктор создает новый экземпляр файла, преобразовывая указанную строку pathname в абстрактный путь. |
3 | File(String parent, String child) Конструктор создает новый экземпляр файла из строки родительского пути и строки дочернего пути. |
4 | File(URI uri) Конструктор создает новый экземпляр файла, преобразовывая данный файл: URI в абстрактный путь. |
Методы
Если Вы используйте file-объекты, то у Вас есть под рукой список вспомогательных методов, которые можно использовать для управления файлами.
№ | Метод и описание |
1 | public String getName() Возвращает имя файла или каталога, по указанному абстрактному имени пути. |
2 | public String getParent() Возвращает строковый путь родителя абстрактного пути, или null, если путь не указывает родительский каталог. |
3 | public File getParentFile() Возвращает абстрактный путь родителя абстрактного пути, или null, если путь не указывает родительский каталог. |
4 | public String getPath() Преобразует абстрактный путь в строку. |
5 | public boolean isAbsolute() Провяет, является ли абстрактный путь абсолютным. Возвращает true, если абстрактный путь является абсолютным, иначе false. |
6 | public String getAbsolutePath() Возвращает строкой абсолютный путь. |
7 | public boolean canRead() Проверяет, может ли приложение прочитать файл, по указанному абстрактному имени пути. Возвращает true тогда и только тогда, когда файл, указанный в абстрактном пути, существует и может быть прочитан приложением; в противном случае false. |
8 | public boolean canWrite() Проверяет, может ли приложение изменять файл, по указанному абстрактному имени пути. Возвращает true тогда и только тогда, когда файловая система фактически содержит файл, по указанному абстрактному имени пути, и приложению разрешено записывать в файл; в противном случае false. |
9 | public boolean exists() Проверяет, существует ли файл или каталог, по указанному абстрактному имени пути. Возвращает true тогда и только тогда, когда существует файл или каталог, по указанному абстрактному имени пути; в противном случае false. |
10 | public boolean isDirectory() Проверяет, является ли файл, по указанному абстрактному имени пути, каталогом. Возвращает true тогда и только тогда, когда файл, обозначенный этим абстрактным именем, существует и является каталогом; в противном случае false. |
11 | public boolean isFile() Проверяет, является ли файл, по указанному абстрактному имени пути, нормальным файлом. Файл является нормальным, если он не является каталогом и, кроме того, удовлетворяет другим системным критериям. Любой файл без каталога, созданный приложением Java, гарантированно является нормальным файлом. Возвращает true тогда и только тогда, когда файл, обозначенный этим абстрактным пустым именем, существует и является нормальным файлом; в противном случае false. |
12 | public long lastModified() Возвращает время последнего изменения файла, по указанному абстрактному имени пути. Возвращает длинное значение, представляющее время последнего изменения файла, измеренное в миллисекундах с эпохи (00:00:00 GMT, 1 января 1970 г.) или 0L, если файл не существует или возникает ошибка ввода-вывода. |
13 | public long length() Возвращает длину файла, обозначенного этим абстрактным именем пути. Возвращаемое значение не указано, если путь указывает на каталог. |
14 | public boolean createNewFile() throws IOException Атомарно создает новый пустой файл, названный этим абстрактным именем пути, тогда и только тогда, когда файл с этим именем еще не существует. Возвращает true, если названный файл не существует и был успешно создан; false, если именованный файл уже существует. |
15 | public boolean delete() Удаляет файл или каталог, по указанному абстрактному имени пути. Если это имя пути обозначает каталог, каталог должен быть пустым, чтобы его можно было удалить. Возвращает true тогда и только тогда, когда файл или каталог успешно удалены; в противном случае false. |
16 | public void deleteOnExit() Просит, чтобы файл или каталог, обозначенные данным абстрактным пустым именем, были удалены при завершении работы виртуальной машины. |
17 | public String[] list() Возвращает массив строк, называющий файлы и каталоги в каталоге, обозначаемом этим абстрактным именем пути. |
18 | public String[] list(FilenameFilter filter) Возвращает массив строк, называющий файлы и каталоги в каталоге, обозначаемом этим абстрактным пустым именем пути, которое удовлетворяет указанному фильтру. |
19 | public File[] listFiles() Возвращает массив абстрактных путей, обозначающих файлы в каталоге, обозначаемом этим абстрактным именем пути. |
20 | public File[] listFiles(FileFilter filter) Возвращает массив абстрактных путей, обозначающих файлы и каталоги в каталоге, обозначаемом этим абстрактным пустым именем пути, которое удовлетворяет указанному фильтру. |
21 | public boolean mkdir() Создает каталог с именем этого абстрактного пути. Возвращает true тогда и только тогда, когда каталог был создан, в противном случае false. |
22 | public boolean mkdirs() Создает каталог с именем этого абстрактного пути, включая любые необходимые, но несуществующие родительские каталоги. Возвращает true тогда и только тогда, когда каталог был создан вместе со всеми необходимыми родительскими каталогами, в противном случае false. |
23 | public boolean renameTo(File dest) Переименовывает файл, обозначенный этим абстрактным пустым именем. Возвращает true тогда и только тогда, когда переименование выполнено успешно, в противном случае false. |
24 | public boolean setLastModified(long time) Устанавливает последней модификацией время файла или каталога с именем этого абстрактного пути. Возвращает true тогда и только тогда, когда операция выполнена успешно, в противном случае false. |
25 | public boolean setReadOnly() Помечает файл или каталог с именем этого абстрактного пути, чтобы разрешить только операции чтения. Возвращает true тогда и только тогда, когда операция выполнена успешно, в противном случае false. |
26 | public static File createTempFile(String prefix, String suffix, File directory) throws IOException Создает новый пустой файл в указанном каталоге, используя строковые prefix и suffix, чтобы сгенерировать его имя. Возвращает абстрактный путь, обозначающий вновь созданный пустой файл. |
27 | public static File createTempFile(String prefix, String suffix) throws IOException Создает пустой файл в каталоге временных файлов по умолчанию, используя данные prefix и suffix, чтобы сгенерировать его имя. Вызов этого метода эквивалентен вызову createTempFile(prefix, suffix, null). Возвращает абстрактное имя пути, обозначающее вновь созданный пустой файл. |
28 | public int compareTo(File pathname) Сравнивает лексикографически два абстрактных пути. Возвращает ноль, если аргумент равен этому абстрактному пути, значение меньше нуля, если это абстрактное имя пути лексикографически меньше аргумента или значение больше нуля, если этот абстрактный путь лексикографически больше аргумента. |
29 | public int compareTo(Object o) Сравнивает этот абстрактный путь с другим объектом. Возвращает ноль, если аргумент равен этому абстрактному пути, значение меньше нуля, если это абстрактное имя пути лексикографически меньше аргумента или значение больше нуля, если этот абстрактный путь лексикографически больше аргумента. |
30 | public boolean equals(Object obj) Проверяет этот абстрактный путь на равенство с данным объектом. Возвращает true тогда и только тогда, когда аргумент не является нулевым и представляет собой абстрактный путь, который обозначает тот же файл или каталог, что и этот абстрактный путь. |
31 | public String toString() Возвращает строковый путь этого абстрактного пути. Это просто строка, возвращаемая методом getPath(). |
Пример
Ниже приведен пример демонстрации объекта File:
Источник