Source code Internet Download Manager này mình lấy từ site 9code.in về chia sẻ cho anh em Diễn đàn cộng đồng C Việt. Ai mong muốn có thể lấy về phát triển thêm.

Internet Download Manager screenshot


Phần code xử lý chính trong chương trình:

Mã:
public void run() {    RandomAccessFile file = null;    InputStream stream = null;    try     {        // Open connection to URL.        HttpURLConnection connection =(HttpURLConnection) url.openConnection();         // Specify what portion of file to download.        connection.setRequestProperty("Range","bytes=" + downloaded + "-");         // Connect to server.        connection.connect();         // Make sure response code is in the 200 range.        if (connection.getResponseCode() / 100 != 2)         {            error();        }         // Check for valid content length.        int contentLength = connection.getContentLength();        if (contentLength < 1)         {            error();        }         /* Set the size for this download if it        hasn't been already set. */        if (size == -1)         {            size = contentLength;            stateChanged();        }         // Open file and seek to the end of it.        file = new RandomAccessFile(getFileName(url), "rw");        file.seek(downloaded);        stream = connection.getInputStream();        while (status == DOWNLOADING)         {            /* Size buffer according to how much of the            file is left to download. */            byte buffer[];            if (size - downloaded > MAX_BUFFER_SIZE)             {                buffer = new byte[MAX_BUFFER_SIZE];            }             else             {                buffer = new byte[size - downloaded];            }             // Read from server into buffer.            int read = stream.read(buffer);            if (read == -1)             {                break;            }            // Write buffer to file.            file.write(buffer, 0, read);            downloaded += read;            stateChanged();        }         /* Change status to complete if this point was        reached because downloading has finished. */        if (status == DOWNLOADING)         {            status = COMPLETE;            stateChanged();        }    }     catch (Exception e)     {        error();    }     finally     {        // Close file.        if (file != null) {            try {                file.close();            } catch (Exception e) {            }        }        // Close connection to server.        if (stream != null) {            try {                stream.close();            } catch (Exception e) {            }        }    }}
Source code ở đính kèm