Загрузка файлов в Android - PullRequest
       19

Загрузка файлов в Android

0 голосов
/ 07 августа 2011

Android, кажется, облегчает загрузку ресурсов определенных типов. Как только я немного покидаю проторенный путь, это кажется менее полезным. Я могу загружать изображения, звуки и другие объекты из папки ресурсов, если и только если они относятся к определенным типам. Если я пытаюсь загрузить двоичный файл моего собственного формата, я получаю не очень полезное исключение «файл не найден», даже если перечисление каталога показывает, что оно явно там.

Я пытался использовать следующие методы для чтения двоичного файла пользовательского формата из каталога ресурсов:

File jfile = new File("file://android_asset/"+filename); //tried to get the URI of the assets folder
JarFile file = new JarFile("assets/"+filename); //tried assuming the assets folder is root
fd = am.openNonAssetFd( filename); //tried getting my file as an non asset in the assets folder (n.b. it is definitely there)
fs = am.open(filename, AssetManager.ACCESS_BUFFER); //tried loading it as an asset

Я думаю, что есть что-то фундаментальное в вводе-выводе файлов Android, которое я пока не понимаю. Документация по управлению активами кажется неполной, и должна быть какая-то причина, чтобы преднамеренно сделать это неинтуитивным (что-то связанное с безопасностью?) Итак, что за надежный, канонический способ загрузки двоичного файла моего собственного формата в приложение для Android?

UPDATE:

Я попробовал файл: /// android_asset /, но все равно не радости.

String fullfilename = "file:///android_asset/"+filename;
File jfile = new File(fullfilename);
if (jfile.exists())
{
    return new FileInputStream(jfile);
}
else
{
return null;  //the file does exist but it always says it doesn't. 
}

Существуют ли какие-либо разрешения для файла или манифеста проекта, которые мне нужны?

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 августа 2011

Я думаю, что лучший способ загрузить файл из папки Assets - использовать AssetManager.open (имя файла строки) - это возвращает InputStream, который затем можно обернуть в BufferedInputStream и в противном случае вызовите read(), чтобы получить байты.Это будет работать независимо от типа файла.Какие проблемы у вас были с этим подходом конкретно?

1 голос
/ 07 августа 2011

Я думаю, что вы пропустили косую черту, как в

File jfile = new File("file:///android_asset/"+filename);

Есть три слеша, а не два. :)

0 голосов
/ 14 мая 2013

Для меня решение было удалить приложение, очистить проект в Eclipse и запустить его снова.Проблема заключалась в том, что Android не смог найти новые файлы, которые я поместил в папку ресурсов.В итоге я прочитал этот вопрос, поэтому надеюсь, что он может пригодиться кому-то еще.

...