File Uri. Получить файл

298
26 апреля 2017, 09:59

С помощью диалогового окна узнаю Uri файла.

Intent i = new Intent().setType("*/*").setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(i, "Выбор файла"), 123);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 123 && resultCode == RESULT_OK) {
        Uri uri = data.getData();
        ....
        File f = new File(uri.toString);
        // Далее с помощью OkHttp отправляю файл...
    }
}

В стактрейсе пишет

java.io.FileNotFoundException: content:/com.android.providers.media.documents/document/image%3A10146 (No such file or directory)

Если заменить на uri.getPath() почти тоже самое

java.io.FileNotFoundException: /document/image:10146 (No such file or directory)

При том, что файл который я открываю имеет расширение .png и совсем другое имя.

Answer 1

Во-первых, не каждый Uri можно конвертировать в путь файловой системы. Конкретно ваш наверное, возможно.

Во-вторых, если есть возможность работать с потоком данных, то получить его легко:

InputStream fileStream = null;
try {
    fileStream = getContentResolver().openInputStream(uri);  
} catch (IOException e) {
    Log.e(this.getClass().getName(), e.getMessage()); 
}

Если все-таки с потоком никак, то сложнее, вот пример для файлов из галереи:

public String getRealPathFromURI(Context context, Uri contentUri) {
  Cursor cursor = null;
  try { 
    String[] proj = { MediaStore.Images.Media.DATA };
    cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
  } finally {
    if (cursor != null) {
      cursor.close();
    }
  }
}
READ ALSO
параллельные запросы

параллельные запросы

Добрый день, помогите неучу с подобной задачкой

297
Куда делся RequiresApi в AndroidStudio?

Куда делся RequiresApi в AndroidStudio?

Добрый день, не могу импортировать RequiresApi

244
Как распарсить XML инструментами Java?

Как распарсить XML инструментами Java?

Всем доброго дняПомогите с решением проблемы парсинга xml без тегов, т

439
Динамическая подгрузка контента onScroll

Динамическая подгрузка контента onScroll

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

241