@Override
public void onCreate(SQLiteDatabase db) {
// 创建filedownlog表
db.execSQL(“CREATE TABLE IF NOT EXISTS filedownlog (id integer primary key autoincrement, downpath varchar(100), threadid INTEGER, downlength INTEGER)”);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(“DROP TABLE IF EXISTS filedownlog”);
onCreate(db);
}
}
/MultiThreadDownload/src/com/wwj/net/download/FileDownloader.java
文件下载器
package com.wwj.net.download;
import java.io.File;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.content.Context;
import android.util.Log;
/**
-
文件下载器
*/
public class FileDownloader {
private static final String TAG = “FileDownloader”;
private Context context;
private FileService fileService;
/* 停止下载 */
private boolean exit;
/* 已下载文件长度 */
private int downloadSize = 0;
/* 原始文件长度 */
private int fileSize = 0;
/* 线程数 */
private DownloadThread[] threads;
/* 本地保存文件 */
private File saveFile;
/* 缓存各线程下载的长度 */
private Map<Integer, Integer> data = new ConcurrentHashMap<Integer, Integer>();
/* 每条线程下载的长度 */
private int block;
/* 下载路径 */
private String downloadUrl;
/**
- 获取线程数
*/
public int getThreadSize() {
return threads.length;
}
/**
- 退出下载
*/
public void exit() {
this.exit = true;
}
public boolean getExit() {
return this.exit;
}
/**
-
获取文件大小
-
@return
*/
public int getFileSize() {
return fileSize;
}
/**
-
累计已下载大小
-
@param size
*/
protected synchronized void append(int size) {
downloadSize += size;
}
/**
-
更新指定线程最后下载的位置
-
@param threadId
-
线程id
-
@param pos
-
最后下载的位置
*/
protected synchronized void update(int threadId, int pos) {
this.data.put(threadId, pos);
this.fileService.update(this.downloadUrl, threadId, pos);
}
/**
-
构建文件下载器
-
@param downloadUrl
-
下载路径
-
@param fileSaveDir
-
文件保存目录
-
@param threadNum
-
下载线程数
*/
public FileDownloader(Context context, String downloadUrl,
File fileSaveDir, int threadNum) {
try {
this.context = context;
this.downloadUrl = downloadUrl;
fileService = new FileService(this.context);
URL url = new URL(this.downloadUrl);
if (!fileSaveDir.exists()) // 判断目录是否存在,如果不存在,创建目录
fileSaveDir.mkdirs();
this.threads = new DownloadThread[threadNum];// 实例化线程数组
HttpURLConnection conn