Java单线程文件下载实现

这篇博客介绍了如何使用Java构建一个支持断点续传、防止重复下载和文件校验的单线程文件下载模块。详细阐述了下载管理与文件下载器的设计思路。
摘要由CSDN通过智能技术生成

实现一个简易文件下载模块,给调用者提供接口,能够实现断点续传,防止重复下载,文件校验等等要求。

一、下载管理

/**
 * Created by fljustdoit.
 */
public class ChargingDownloadManager {

    private static List<String> loadingList = new ArrayList<String>();

    public static void download(String url, File saveDir, String MD5, ChargingDownloadListenManager.DownloadListener listener) {
        if (!loadingList.contains(MD5)) {
            loadingList.add(MD5);
            DownloadTask task = new DownloadTask(url, saveDir, MD5, listener);
            new Thread(task).start();
        }
    }

    private static final class DownloadTask implements Runnable {
        private String path;
        private File saveDir;
        private String MD5;
        private ChargingDownloadListenManager.DownloadListener mDownloadListener;
        private FileDownloader loader;

        public DownloadTask(String path, File saveDir, String MD5, ChargingDownloadListenManager.DownloadListener listener) {
            this.path = path;
            this.saveDir = saveDir;
            this.MD5 = MD5;
            this.mDownloadListener = listener;
        }

        public void run() {
            try {
                // 实例化一个文件下载器
                loader = new FileDownloader(MD5, path, saveDir);
                loader.download(loadingList,mDownloadListener,MD5);
            } catch (Exception e) {
                if (null != loadingList && loadingList.contains(MD5)) {
                    loadingList.remove(MD5);
                }
                mDownloadListener.onFailed(ChargingDownloadListenManager.FAILURE);
            }
        }
    }
}
这一部分通过传递MD5值对文件命名,保证文件的唯一性。创建一个列表存储正在被下载的任务,防止正在下载中的任务被多次下载。

二、文件下载器

/**
 * Created by fljustdoit.
 */
public class FileDownloader {
    private static final String TAG = "FileDownloader";
    /* 原始文件长度 */
    private long fileSize = 0;
    /* 线程 */
    private ChargingDownloadThread thread;
    /* 本地保存文件 */
    private File saveFile;
    /* 下载路径 */
    private String downloadUrl;

    /**
     * 构建文件下载器
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值