android中支持多种文件类型的下载类

来源:互联网 发布:mac的dare you试色 编辑:程序博客网 时间:2024/06/06 01:44

  String directoryName = Environment.getExternalStorageDirectory().toString()                    + "/filename";////文件保存路径///传入参数:Context对象,下载地址, 文件保存路径;DownloadTask downloadTask = new DownloadTask (this, mDownloadUrl, directoryName);        new Thread(downloadTask ).start();///////启动线程进行下载

////下载类public class DownloadTask  implements Runnable {    private long mDownloadedSize = 0;    private long mTotalSize;private int mDownloadPercent;   private String mLocalPath;    private String mURL;    private Context mContext;   public DownloadTask  (Context context, String url, String localPath) {        this.mLocalPath = localPath;        this.mURL = url;        this.mContext = context;    }   @Override    public void run() {      download();    };////下载方法 protected boolean download() {        File file = new File(mLocalPath);        if (file.exists()) {            mDownloadedSize = file.length();        } else {            mDownloadedSize = 0;        }        Log.d(TAG, "mURL, " + mURL + " downloadedSize, " + mDownloadedSize);        HttpURLConnection httpConnection = null;        URL url = null;        try {            url = new URL(mUpgradeURL);            httpConnection = (HttpURLConnection) url.openConnection();            mTotalSize = httpConnection.getContentLength();            Log.d(TAG, "totalSize, " + mTotalSize);            if (mDownloadedSize == mTotalSize ) {                ////////已下载到本地                return true;            } else if (mDownloadedSize > mTotalSize) {                if (!file.delete()) {                    return false;                }            }            httpConnection.disconnect();        } catch (Exception e) {            e.printStackTrace();            return false;        } finally {            try {                if (httpConnection != null) {                    httpConnection.disconnect();                }            } catch (Exception e) {            }        }        InputStream inStream = null;        RandomAccessFile randomAccessFile = null;        try {            httpConnection = (HttpURLConnection) url.openConnection();            httpConnection.setRequestProperty("Accept", "image/gif, " + "image/jpeg, "                    + "image/pjpeg, " + "image/pjpeg, " + "application/x-shockwave-flash, "                    + "application/xaml+xml, " + "application/vnd.ms-xpsdocument, "                    + "application/x-ms-xbap, " + "application/x-ms-application, "                    + "application/vnd.ms-excel, " + "application/vnd.ms-powerpoint, "                    + "application/msword, " + "*/*");            httpConnection.setRequestProperty("Accept-Language", "zh-CN");            httpConnection.setRequestProperty("Referer", mUpgradeURL);            httpConnection.setRequestProperty("Charset", "UTF-8");            httpConnection.setRequestProperty("Range", "bytes=" + mDownloadedSize + "-");            httpConnection.setRequestProperty("Connection", "Keep-Alive");            inStream = httpConnection.getInputStream();            File saveFile = new File(mLocalPath);            randomAccessFile = new RandomAccessFile(saveFile, "rwd");            randomAccessFile.seek(mDownloadedSize);            int offset = 0;            int count = 0;            int perUnit = (int) mTotalSize / 1024 / 100;            byte[] buffer = new byte[1024];            while ((offset = inStream.read(buffer, 0, 1024)) != -1) {                randomAccessFile.write(buffer, 0, offset);                count++;                if (count == perUnit && mDownloadedSize < mTotalSize) {                    mDownloadPercent = (int) (mDownloadedSize * 100 / mTotalSize);                   ////////下载百分百mDownloadPercent                     count = 0;                }                mDownloadedSize += offset;            }            if (mDownloadedSize == mTotalSize ) {             /////////下载完成            }            Log.d(TAG, "download finished.");            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        } finally {            try {                if (inStream != null) {                    inStream.close();                }                if (httpConnection != null) {                    httpConnection.disconnect();                }                if (randomAccessFile != null) {                    randomAccessFile.close();                }            } catch (Exception e) {            }        }    }}


0 0