开发者

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;
    开发者_StackOverflow    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?


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜