yosh
yosh

Reputation: 3305

Android - file download problem - incomplete file

I have checked many code snippets, tried with and without buffer and I can't get to download whole file to SD card. The code I use currently is:

    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) { }

This code creates directory on SD card but downloads only 77 bytes of files. What might be the problem?

Upvotes: 0

Views: 1944

Answers (1)

nstosic
nstosic

Reputation: 2614

The error here is that he was writing the count variable converted to byte datatype instead of the bytes read from the input stream (those should be stored in a temporary byte[] buffer via bis.read(buffer)) The proper code block should be:

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();

Upvotes: 1

Related Questions