- Класс File
- Методы класса File
- Каталог
- Список каталогов
- Метод listFiles()
- Android: List External Storage Files
- Работа с файловой системой
- Чтение и сохранение файлов
- Java: Список файлов в каталоге
- Вступление
- Файл.список()
- Фильтр имен файлов
- Файл.listFiles()
- Файлы.прогулка()
- Git Essentials
- Вывод
- Андроид, как я могу получить список всех файлов в папке?
- 6 ответов
Класс 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 показан в уроке Файловый менеджер и в других примерах.
Источник
Android: List External Storage Files
As you can see, the TextView is wrapped in a ScrollView to handle a large number of files.
Step 4:
Open the MainActivity.kt and add a listFiles and a listExternalStorage function as shown below:
The listFiles receives a directory and recursively list files in that directory. If the newly found File is a directory, it’s sub-files are listed recursively. If it is an actual file, the absolute path of that file is appended to the txtFiles TextView .
Step 5:
Add the requestCode variable, the list function and override the onRequestPermissionsResult function as shown below:
Step 6:
Add the rxjava dependency to the build.gradle (Module: app) .
After adding these two dependencies your build.gradle should look like this:
After saving the changes, synchronize the project to download the dependencies.
Step 7:
Modify the MainActivity.kt as shown below:
Notice that there is a disposable instance variable which is used to dispose the RxJava resources in the onPause method and in the onComplete (the third block in the subscribe method call) lambda expression. Now there is a FileLister publisher which receives the parent directory to traverse and publish the files to the subscriber. Once the traversal is completed (after the recursive method call), the publisher calls the onComplete method to let the subscriber know that the process is completed.
The listExternalStorage function executes the publisher in a separate thread and appends the result to TextView in the main thread.
Though we can list all the files from the external storage, it is not recommended to do so unless otherwise there is a valid reason behind it. You can find the source code of this project at the GitHub repository.
If you have any questions, feel free to comment below.
Источник
Работа с файловой системой
Чтение и сохранение файлов
Работа с настройками уровня 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 перечисления файлов в файловой системе, используя как линейный, так и рекурсивный подходы.
Источник
Андроид, как я могу получить список всех файлов в папке?
мне нужно имя (строка) всех файлов в res/raw/
похоже, что корневой каталог является корнем эмулятора android. и не корневой каталог моих компьютеров. Это имеет достаточно смысла, но на самом деле не помогает мне узнать, где существует папка raw.
Update: Спасибо за все отличные ответы. Похоже, что некоторые из них работают,но только наполовину. Возможно, более подробное описание будет помощи
Я хочу получить все mp3-файлы в папке raw, чтобы я мог получить все имена, а затем добавить их в URI для воспроизведения случайного MP3 следующим образом.
когда я поставил » Деннис.mp3 » в папку assets, он появляется, как и ожидалось, однако, используя приведенный выше код, я больше не могу получить доступ к этому MP3, если нет чего-то вроде:
6 ответов
чтобы перечислить все имена ваших необработанных активов, которые в основном являются именами файлов с удаленными расширениями, вы можете сделать следующее:
поскольку фактические файлы не просто сидят в файловой системе, как только они находятся на телефоне, имя не имеет значения, и вам нужно будет ссылаться на них целым числом, назначенным этому имени ресурса. В приведенном выше примере вы можете получить это целое число таким образом:
Это тот же int, который вы получите, обратившись к Р. сырыми.whateveryounamedtheresource
этот код будет извлекать все файлы из «Нового Foder» sdCard.
а также убедитесь, что добавить Android sd карты разрешение на запись в манифесте.xml-файл
мне нужно имя (строка) всех файлов в res/raw/
нет файлов в res/raw/ на устройстве. Это ресурсы. Нет хорошего способа перебирать ресурсы, кроме как с помощью отражения перебирать статические члены данных R.raw класс для получения различных имен и значений идентификаторов.
но на самом деле не помогает мне узнать, где существует папка raw.
как папка, она существует только на ваша машина разработки. Это не папка на устройстве.
насколько я помню, у вас будет список с (просто попробуйте разные пути):
Источник