Get filename from uri android

Get File Path From URI in Android JAVA

In Android when we pick an image, video, or any other type of file from the gallery, documents folder, or capture directly from the camera, we receive a URI object in intent. We have different ways to get a full file path from URI based on content providers. In this article, we will discuss how to get a file path from URI in Android for the coming files picked through Storage, Documents, as well as depending upon the _data field for the MediaStore and other file-based ContentProviders.

Following is the Java code if you are looking for Kotlin solution visit this Get Path From URI In Kotlin.

Utility Class to Get File Path From URI in Android

Create a file UriUtils.java and copy the following class in that file.

How to use UriUtils class

You might think that this class is too lengthy, but as mentioned above it handles all scenarios. It checks all android versions and the folders to what the Uri is appointing. It handles different types of content providers. There are different methods depending upon documents path, is it coming through downloads folder or media directory. It also checks is it picked through SECONDARY_STORAGE or EXTERNAL_STORAGE. Few other scenarios like Google Photos Uri, Google drive Uri are also handled properly. Just copy this class in your project as a utility class and rest will be handled by it.

Читайте также:  Пасхалка андроид 11 самсунг

That’s it. This is how to get file path from URI in Java Android.

Источник

Как извлечь имя файла из URI, возвращенного из Intent.ACTION_GET_CONTENT?

Я использую сторонний файловый менеджер, чтобы выбрать файл (PDF в моем случае) из файловой системы.

Вот как я запускаю деятельность:

Это то, что у меня есть в onActivityResult :

Фрагмент кода заимствован из инструкций Open Intents File Manager, доступных здесь:
http://www.openintents.org/en/node/829

Цель if-else – обратная совместимость. Интересно, если это лучший способ получить имя файла, поскольку я обнаружил, что другие файловые менеджеры возвращают все виды вещей.

Например, Documents ToGo возвращает что-то вроде следующего:

На котором getContentResolver().query() возвращает null .

Чтобы сделать что-то более интересным, неназванный файловый менеджер (я получил этот URI из журнала клиента) возвратил что-то вроде:

Есть ли предпочтительный способ извлечения имени файла из URI или следует использовать синтаксический анализ строк?

Конденсированная версия, чтобы просто извлечь имя файла (если «this» – это Activity):

Я использую что-то вроде этого:

Извлечение информации из файла | Разработчики Android

Получение имени файла.

Если вам это нужно, это должно сработать.

Я использую ниже код, чтобы получить имя файла и размер файла из Uri в моем проекте.

Моя версия ответа на самом деле очень похожа на @Stefan Haustein. Я нашел ответ на странице разработчика Android. Извлечение информации о файле ; Информация здесь еще более сконцентрирована на этой конкретной теме, чем на веб-сайте Storage Access Framework . В результате запроса индекс столбца, содержащий имя файла, является OpenableColumns.DISPLAY_NAME . Ни один из других ответов / решений для индексов столбцов не работал для меня. Ниже приведена функция выборки:

Во-первых, вам нужно преобразовать свой объект URI объект URL , а затем использовать объект File для получения имени файла:

Источник

Преобразование файла: Uri в файл в Android

какой самый простой способ конвертировать из file: android.net.Uri до File В Android?

пробовал следующее, Но это не работает:

Читайте также:  Outlook для контактов андроид

15 ответов

то, что вы хотите.

Примечание: uri.toString() возвращает строку в формате: «file:///mnt/sdcard/myPicture.jpg» , тогда как uri.getPath() возвращает строку в формате: «/mnt/sdcard/myPicture.jpg» .

после долгого поиска это то, что сработало для меня:

EDIT: Извините, я должен был протестировать лучше раньше. Это должно сработать:

ничего из этого не работает для меня. Я нашел это рабочим решением. но мой случай специфичен для изображений.

непосредственно и скопируйте файл. См. также:

С Котлином еще проще:

Я сделал это следующим образом:

поэтому в основном сначала я пытаюсь использовать файл, т. е. снимок, сделанный камерой и сохраненный на SD-карте. Это не работает для изображения возвращаемых: Intent photoPickerIntent = новое намерение(намерение.ACTION_PICK); В этом случае необходимо преобразовать Uri в реальный путь по

@CommonsWare объяснил все вещи довольно хорошо. И мы действительно должны использовать предложенное им решение.

кстати, только на информацию мы могли положиться, когда quering ContentResolver — Это имя и размер файла, как указано здесь: получение информации о файле / разработчики Android

как вы могли видеть, есть интерфейс OpenableColumns который содержит только два поля: DISPLAY_NAME и SIZE.

в моем случае мне нужно было получить информацию EXIF о JPEG изображение и повернуть его, если это необходимо перед отправкой на сервер. Для этого я скопировал содержимое файла во временный файл с помощью ContentResolver и openInputStream()

Лучшим Решением

создайте один простой класс java FileUtil и используйте для создания, копирования и переименования файла

Я использую uri.toString() и uri.getPath() но не работает для меня. Я наконец нашел решение.

пользовательский класс FileUtil в вашем коде

вы можете получить файл из файла Uri, используя следующий метод. Он DocumentFile для параметра, но вы можете легко изменить его. Самый простой способ проверить этот метод для создания файла uri с помощью DocumentFile.fromFile(Environment.getExternalStorageDirectory()); который имеет Uri file:///storage/emulated/0

вместо создания файлов из Uri используйте DocumentFile.fromTreeUri(Context, Uri) или DocumentFile.fromSingleri(Context, Uri) для создания или удаления файлов и для потоков используйте getContentResolver().openOutputStream(documentFile.getUri()) и getContentResolver().openInputStream(documentFile.getUri()) для записи файлов и чтения файлов.

Читайте также:  Видеорегистратор зеркало trendvision amirror 12 android future

публичная строка getRealPathFromURI(Uri uri) <

затем, используя для получения файла из URI:

— НАДЕЖДА МОЖЕТ ПОМОЧЬ ВАМ — — — —

Android + Котлин

добавить зависимость для расширений Kotlin Android:

получить файл из uri:

Android + Java

просто переместить наверх 😉

следующим кодом я могу получить общий pdf-файл adobe application в виде потока и сохранить его в путь приложения android

для людей, которые ищут решение для изображений в частности вот это.

Источник

URI (Uniform Resource Identifier)

URI — это специальный идентификатор, по которому можно определить абстрактный или физический ресурс. Самый понятный пример с URI — это обычная веб-страница. Возьмём к примеру страницу http://developer.alexanderklimov.ru/android/catshop/catshop.php. Данный адрес можно разбить на несколько частей:

  • Scheme — http
  • Scheme-specific part — //developer.alexanderklimov.ru/android/catshop/catshop.php
  • Path — /android/catshop/

У протокола http есть и другие параметры, которые рассматривать не будем. Существует также протокол ftp, имеющий свои параметры. Ниже вы увидите другие примеры. Главное здесь — возможность определить нахождение ресурса по представленным данным.

Допустим, мы хотим загрузить видеоматериал в компонент VideoView. Само видео может находиться в ресурсах программы или на SD-карте. С помощью URI мы можем подсказать программе, откуда следует загрузить файл.

Например, если видеофайл playcat.3gp находится в папке /res/raw, то получить адрес для загрузки можно следующим образом:

Если файл хранится на внешней карточке, то код будет следующим (опустим правильное определение имени карточки):

У компонента VideoView есть метод setVideoURI(URI uri), в котором нужно указать объект класса URI:

Посмотрим на другие примеры:

Координаты

Метод uri.getScheme() вернёт geo, а метод uri.getSchemeSpecificPart()54.354183,37.34011.

Номер телефона

В данном случае метод uri.getScheme() вернёт tel, а uri.getSchemeSpecificPart() — 1234578.

Контакты

URI также используется при работе с контент-провайдерами, в частности, с контактами.

Источник

Оцените статью