2011-02-03 2 views
0

Я проверил множество фрагментов кода, попытался с буфером и без него, и я не могу загрузить весь файл на SD-карту. Код, который я использую в настоящее время:Android - проблема с загрузкой файла - неполный файл

try { 
     url = new URL("http://mywebsite.com/directory/"); 
    } catch (MalformedURLException e1) { } 

    String filename = "someKindOfFile.jpg"; // this won't be .jpg in future 

    File folder = new File(PATH); // TODO: add checking if folder exist 
    if (folder.mkdir()) Log.i("MKDIR", "Folder created"); 
    else Log.i("MKDIR", "Folder not created"); 
    File file = new File(folder, filename); 

    try { 
     conn = url.openConnection(); 
     is = conn.getInputStream(); 

     BufferedInputStream bis = new BufferedInputStream(is); 
     ByteArrayBuffer baf = new ByteArrayBuffer(50); 
     int current = 0; 
     while ((current = bis.read()) != -1) { 
       baf.append((byte) current); 
     } 
     FileOutputStream fos = new FileOutputStream(file); 
     fos.write(baf.toByteArray()); 
     fos.close(); 
     is.close(); 
    } catch (IOException e) { } 

Этот код создает каталог на SD-карте, но загружает только 77 байт файлов. Что может быть проблемой?

+0

Как вы можете загрузить только 77 бит? –

+0

@ chirag-shag 77 байт - это размер файла в DDMS Emulator SD card file explorer – yosh

+0

Каков ожидаемый результат? Вы пытались загрузить один и тот же контент с помощью инструмента, такого как wget или curl, для сравнения с тем, что загружает ваш код? Каково содержимое созданного вами 77-байтового файла? – RivieraKid

ответ

1

Ошибка здесь в том, что он писал count переменной преобразуется в byte типа данных вместо байтов, считанных из входного потока (те должны быть сохранены во временном byte[] buffer через bis.read(buffer)) Соответствующий код блока должен быть:

BufferedInputStream bis = new BufferedInputStream(is); 
FileOutputStream fos = new FileOutputStream(file); 
int current = 0; 
byte[] buffer = new byte[1024]; 
while ((current = bis.read(buffer)) != -1) { 
    fos.write(buffer, 0, current); 
} 
fos.close(); 
is.close(); 
Смежные вопросы