Android - проблема с загрузкой файла - неполный файл - PullRequest
0 голосов
/ 03 февраля 2011

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

    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 байт файлов. В чем может быть проблема?

1 Ответ

1 голос
/ 18 ноября 2014

Ошибка здесь в том, что он записывал переменную 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...