Ресурсы Android, как я могу прочитать файл из подпапки? - PullRequest
2 голосов
/ 03 мая 2019

Код ниже работает: он читает файл с именем «file.txt», который находится в папке «assets» APK, и сохраняет его в буфере. Пока все хорошо:

String u = "content://com.example.app/file.txt:assets"
ContentResolver r = controls.activity.getContentResolver();
InputStream in = r.openInputStream(Uri.parse(u));
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int n = in.read(buffer);
while (n >= 0) {
    out.write(buffer, 0, n);
    n = in.read(buffer);
}
in.close();
return out.toByteArray();

Если, однако, файл, который я хочу прочитать, находится в подпапке ресурсов, например, вложенная папка «sub», и я предоставляю этот Uri для вышеуказанного кода:

String u = "content://com.example.app/sub/file.txt:assets"

... тогда в этом случае я ничего не получу. Файл там, как assets / sub / file.txt, но приведенный выше код возвращает пустой буфер. Единственное изменение, которое я сделал, это заменил «file.txt» на «sub / file.txt», который указывает, где хранится файл.

Что я делаю не так? Это неправильно, чтобы создать строку URI вручную, как это? Я считаю, что разрешено хранить файлы в подпапках ресурсов ... Если это разрешено, как мне указать путь в строке URI?

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

Любая помощь очень ценится!

1 Ответ

1 голос
/ 03 мая 2019

Используйте AssetManager и его open() метод . Итак, вы бы заменили:

ContentResolver r = controls.activity.getContentResolver();
InputStream in = r.openInputStream(Uri.parse(u));

с:

AssetManager assets = controls.activity.getAssets();
InputStream in = assets.open("sub/file.txt");
...