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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android上,我们可以通过多线程和异步任务来实现同时下载多个文件的功能。 首先,我们可以使用多线程来实现同时下载多个文件。我们可以使用Java的线程,通过创建多个线程来同时下载不同的文件。每个线程负责下载一个文件,可以使用HttpURLConnection或者HttpClient等工具来进行文件下载。通过多线程的方式,我们可以同时进行多个文件下载操作,提高下载的效率。 其次,我们也可以使用异步任务来实现同时下载多个文件Android提供了AsyncTask,可以方便地进行异步任务的处理。我们可以创建多个异步任务,每个任务负责下载一个文件。在异步任务,我们可以使用HttpClient或者OkHttp等网络库来进行文件下载。通过异步任务的方式,我们可以在后台同时运行多个下载任务,然后在主线程更新下载进度或者显示下载结果。 无论是使用多线程还是异步任务,我们需要注意一些细节。首先,对于多线程的情况,我们需要控制并发线程的数量,避免同时下载过多的文件导致网络拥堵。其次,对于异步任务的情况,我们需要注意线程同步问题,确保多个异步任务之间的互不干扰。另外,我们还需要处理好异常情况,比如网络连接失败或者下载过程出现异常等。 总之,Android提供了多种方式来实现同时下载多个文件的功能,我们可以根据具体需求选择合适的方案来进行开发。无论是多线程还是异步任务,都需要注意并发控制和线程同步的问题,以及处理异常情况。这样才能确保同时下载多个文件的功能的稳定和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值