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

该博客详细介绍了如何在Android中实现文件下载,包括设置文件保存路径,使用HttpURLConnection请求文件,通过设置请求头实现断点续传功能。在下载过程中,更新下载进度并确保下载完成后文件完整。
摘要由CSDN通过智能技术生成

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

}

}

}

}

原文:http://blog.csdn.net/only_tan/article/details/38301143

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值