Не удается получить доступ к файлу в необработанной папке - PullRequest
1 голос
/ 11 мая 2019

Я новичок в разработке Android.У меня есть файл test.txt в папке res\raw.По какой-то причине я не могу получить к нему доступ.

Вот код, который я использую только для тестирования.Почему file.exists() возвращает false?

final String path = "android.resource://" + getActivity().getPackageName() + "/raw/test.txt";
final Uri uri = Uri.parse(path);

final File file = new File(uri.getPath());
boolean exists = file.exists(); // Returns false.

Кстати, мне нужно получить Uri файла.Мне это нужно, чтобы можно было использовать существующую функцию, которая принимает Uri в качестве аргумента.

1 Ответ

0 голосов
/ 11 мая 2019

Почему file.exists () возвращает false?

Во-первых, ресурс - это файл на компьютере разработчика. Это не файл на устройстве.

Во-вторых, getPath() на Uri просто возвращает часть пути Uri. В вашем случае это /raw/test.txt. Если бы Uri был https URL вашего вопроса, путь был бы /questions/56090894/cant-access-file-in-the-raw-folder. Ни один из них не будет действительным путем файловой системы на любом устройстве Android. Вы не можете взять полуслучайные строки, передать их конструктору File и ожидать, что они будут иметь значение.

Мне нужно получить Uri файла

Если вы действительно имеете в виду «получить Uri за ресурс», вы можете попробовать uri. Схема android.resource немного неясна, поэтому есть большая вероятность, что используемая вами функция не будет ее поддерживать.

В этом случае вам необходимо:

  • Откройте InputStream на вашем необработанном ресурсе (getResources().openRawResource() на Context)
  • Откройте FileOutputStream в файле, которым вы управляете (например, в getCacheDir())
  • Скопируйте байты из InputStream в OutputStream
  • Попробуйте Uri.fromFile() создать Uri для библиотеки

Также возможно, что функция ожидает какой-то другой вид Uri. Поскольку мы не знаем, что это за функция, мы не можем просмотреть ее документацию (если она есть) и сообщить вам, чего она может ожидать или не ожидать.

...