Записать медиафайл на внутреннюю / внешнюю память - PullRequest
2 голосов
/ 11 января 2012

В настоящее время я пытаюсь найти способ записи файла мультимедиа во внутреннее / внешнее хранилище (основное хранилище). Сохраняемый файл может иметь любой размер от нескольких МБ до 50 МБ. У меня есть логика, которая работает на моем Droid X 2.3.3 Razr 2.3.5 (я верю), но не работает на моем Galaxy Nexus (не имеет съемного хранилища, но имеет встроенную карту 16Gig с v4.0.2). Я посмотрел вокруг и не нашел ни одного кода / примеров, которые работают с v4.0. Может быть, я подхожу к этому все неправильно, поскольку у него нет фактической SD-карты? может быть, это что-то новое в v4.0? В настоящее время, когда я запускаю свое приложение на Galaxy Nexus, я получаю следующее: System.err (19520): java.io.FileNotFoundException:

ОБНОВЛЕНО

InputStream inputStream = urlConnection.getInputStream(); 
File PATH = Environment.getExternalStorageDirectory(); 
File FILE = new File(Environment.getExternalStorageDirectory()+ "/" + FILENAME); 
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); 
// buffer int bufferSize = 1024; int bufferLength = 0; byte[] buffer = new byte[bufferSize]; 
while ((bufferLength = inputStream.read(buffer)) != -1) { 
byteBuffer.write(buffer, 0, bufferLength); 
} 
byte[] temp = byteBuffer.toByteArray(); 
FileOutputStream fos = new FileOutputStream(FILE); 
fos.write(temp); 
fos.close();

Ответы [ 2 ]

1 голос
/ 11 января 2012

Вы помещаете этот файл в определенную директорию на своей SD-карте? Внешнее хранилище?

Я полагаю, что ваши разрешения в вашем манифесте хороши, потому что «отказано в разрешении не получено», поэтому, если вы поместите файл в определенную папку, которая не создана, вам следует вызвать функцию mkdirs ()файл!

1 голос
/ 11 января 2012

Во-первых, не конвертируйте его в строку, просто используйте getExternalStorageDirectory() как File:

File sd = Environment.getExternalStorageDirectory();
File file = new File(sd, FILENAME);

Я не знаю, исправит это или нет, но это не мешало бы попробовать. И вам не нужно вызывать file.createNewFile() перед записью в файл с FileOutputStream. Документы о FileOutputStream говорят:

Выходной поток, который записывает байты в файл. Если выходной файл существует, его можно заменить или добавить. Если он не существует, новый файл будет создан.

А по какой строке кода происходит FileNotFoundException?

...