并发文件下载助手

设计实现过程

第 1 阶段 实现单个文件的下载功能

第一阶段的要求是,输入 url,保存路径,线程数目后实现多线程下载。

大体思路是根据 url,获取下载文件的大小。然后根据线程数目,算出来每个线程所要下载的文件块大小。当每个线程负责的文件块下载完毕后,对所有文件按照次序进行合并,最后清除临时文件。

主要用到 Java 中的多线程(线程池),http,IO 流,file 等方面的知识,主要参考 Java 官方文档和各类博客。

本阶段一共设计了 6 个类:

Main 类:

作为项目的入口,输入 url、保存路径、线程数目。

DownloadInfo 类:

该类包含 getFileName 函数和 calculateEverySize 函数,前者 getFileName 用于获取文件名,后者 calculateEverySize 用于计算每个线程所要下载的文件块的大小。

Http 类:

用于获取 HttpURLConnection 对象。有两个重载函数 HttpURLConnection getHttpURLConnection(String url,long beginSite,long endSite)和 HttpURLConnection getHttpURLConnection(String url1)。前者根据起始位置和结束位置获取目标文件的 HttpURLConnection,用于分块文件下载;后者直接根据 url 获取目标文件的 HttpURLConnection。

Downloader 类:

Downloader 负责具体的下载任务。根据起始位置,结束位置,和线程的编号,利用 IO 流实现每个文件块的下载。由于使用了线程池的 submit,本类实现了 Callable。

DownloadControl 类:

DownloadControl 负责全局掌控。其下有三个方法:

run 负责全局掌控,进行下载任务的切分,给每个线程都分配一定的任务,然后利用线程池进行多线程下载。最后调用 mergeTemp 和 clearTemp 方法,按照次序合并临时文件,合并完成后清除临时文件。

类 IfLegal:

主要判断输入的合法性。即 URL,保存路径,线程数是否合法。

UML 类关系图:

单元测试设计:

根据每个函数的特点,设计相应的单元测试。详见 软件测试.md

第 2 阶段 实现批量多协议文件下载功能

第二阶段主要任务是从文本中获取各类下载链接。

主要思路是,新建一个类 UrlReader,专门从输入中获取下载的 url。并将获取到的 url 保存为 https 的链接形式,保存在一个私有属性 String[] urls 中。类 UrlReader 其下应该包含三个方法:

getFromVariableUrls(String urls)

从输入的参数中获取 url。输入的参数为一个字符串,不同的链接之间用空格分开,利用 split 函数分割后,保存在私有属性 String[] urls 中。www.biyezuopin.vip

getFromFileUrls(String fileName)

根据文件内容获取 url。输入的参数保存有下载链接的文本文档,每行为一个下载链接。采用 IO 流的方式,利用 Scanner 类读取文件,利用其中的 hasNextLine()和 nextLine()方法,将其保存在私有属性 String[] urls 中。

getFromRegexUrl(String urls,int start, int end)

根据正则表达式获取 Url,用“{}”表示 url 中可以被替换的部分。 start 和 end 表示批量下载链接中有规律连续的部分的头尾。

另外,再根据需要,对 Main 函数做出相应修改。

单元测试设计:

根据每个函数的特点,设计相应的单元测试。详见 软件测试.md

第 3 阶段 用户界面

第 3 阶段界面初步设计如下

在界面设计阶段,我准备使用 swing GUI 进行设计。使用了 JFormDesigner 插件辅助设计工作。

打开项目后,会自动获取剪切板内容到 “本地文件名或者 url” 中,根据剪切板中的内容,选择不同的下载按钮。同时,可显示当前的下载状态(完成?失败?正在下载?)。

输入文件保存地址和线程数目,可以点击保存,这样再次打开项目时还会保存当前设置。保存设置时,在项目中建立一个 settings.txt 文件。每次打开时从文件中读出保存地址和线程数;保存设置时,再将保存地址和线程数写入文件。

输入参数,开始下载后,会显示下载状态。

GetClipboard

关于自动获取剪切板内容,可以新建一个类,GetClipboard,应该有方法 getClipboard。该方法自动获取剪切板内容,并判断是否为字符串。如果为字符串,则将其获取到文本框里。

此外,需根据不同的按钮设置鼠标监听。

输入参数有:

1、文件保存地址(可保存)

2、线程数(可保存)

3、单个 URL,多个 URL(用空格隔开),或本地链接

4、正则表达式形式的 URL,起始编号 start,最终编号 end。

单元测试设计:

根据每个函数的特点,设计相应的单元测试。详见 软件测试.md

第 3 阶段最终界面设计如下:

在实现的过程中,发现了之前分析设计中的不合理,故对设计进行优化。

利用 JFormDesigner,将优化后的设计展示如下。

单击图中按钮,可以唤起对应的下载窗口。当弹窗加载时,会自动从剪切板里获取相应的内容。

在窗口输入参数并点击 OK 后,会开始下载,并更新下载状态。下载状态会出现在每个具体下载的窗口里。

一共四个界面,所以需要建立四个负责 UI 的类。

单元测试设计:

根据每个函数的特点,设计相应的单元测试。详见 软件测试.md
口里。

一共四个界面,所以需要建立四个负责 UI 的类。

单元测试设计:

根据每个函数的特点,设计相应的单元测试。详见 软件测试.md

基于Java的并发文件下载助手相关推荐

  1. java 下载加速_一种基于Java的大文件下载加速方法与流程

    本发明涉及java/多线程技术领域,涉及一种加速文件下载装置,具体提供一种基于java的大文件下载加速方法. 背景技术: 现有的常用下载方式是基于浏览器的单线程下载.这种单线程下载的方式,是通过htt ...

  2. java 实现违章_基于JAVA的违章查询助手数据调用代码实例详解

    [Java]代码 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; ...

  3. java 实现违章_基于JAVA的违章查询助手数据调用代码实例

    1.[代码][Java]代码 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOExce ...

  4. 基于java糖助手服务交流平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java糖助手服务交流平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java糖助手服务交流平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈 ...

  5. java计算机毕业设计基于安卓Android的校园助手APP

    项目介绍  网络的广泛应用给生活带来了十分的便利.所以把校园助手与现在网络相结合,利用java技术建设校园助手APP,实现校园助手的信息化.则对于进一步提高校园助手发展,丰富校园助手经验能起到不少的促 ...

  6. java毕业设计——基于java+J2EE+sqlserver的在线考试系统设计与实现(毕业论文+程序源码)——在线考试系统

    基于java+J2EE+sqlserver的在线考试系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2EE+sqlserver的在线考试系统设计与实现,文章末尾附有本毕业设 ...

  7. 基于Java(SpringBoot)+Vue+MySQL 实现(Web)的网络课程平台【100010329】

    基于 SpringBoot 的网络课程平台 1 绪论 1.1 引言 本科题研究并实现了一个面向网络学习的平台,为需要学习的人提供了一个学习的平台.任何人都课在本平台进行注册登录,学习观看视频. 本平台 ...

  8. Lucene:基于Java的全文检索引擎简介(转载)

    Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基 ...

  9. Java多线程并发技术

    Java多线程并发技术 参考文献: http://blog.csdn.net/aboy123/article/details/38307539 http://blog.csdn.net/ghsau/a ...

最新文章

  1. 对于这个函数const int func(const int a) const声明中,三个const分别是什么意思?...
  2. [OS复习]进程管理5
  3. 系统镜像服务器,服务器系统镜像
  4. [Ext JS6]多类型设备开发
  5. 安装VS2017报错:程序包清单签名验证失败
  6. 由大脑工作原理,探讨向菩萨求聪明的灵验的科学原理
  7. 米家扫地机器人怎么加水_最省心的扫地机器人,米家扫地机器人1C:视觉动态导航实力强劲...
  8. 算法速学速用大辞典 pdf_随机梯度蒙特卡洛算法-重要性采样
  9. 工业相机像元与像素之间的关系
  10. 姑娘留步,容我劫个色
  11. cad卸载_CAD卸载后为什么安装不了?解决方法原来是这样!
  12. 74hc595数码管C语言,74HC595 数码管程序
  13. java语言程序设计第六章答案_Java语言程序设计(一)课后习题第六章(附答案)
  14. 普通话测试软件哪个不要钱,普通话测试软件哪个好_普通话测试软件靠谱吗_不要钱的普通话测试软件...
  15. 《非暴力沟通两性篇》读书笔记
  16. java学习笔记2(datawhale教程):运算符和表达式、流程控制、数组
  17. 【BZOJ 4399】魔法少女LJJ
  18. vue + elementui +sass+axios做卖座网的后台管理系统
  19. yolov5-6.0训练自己的模型
  20. 深圳云计算培训:Linux学习思路(一)

热门文章

  1. DDD:我的购书清单(欢迎借读,邮费自理)
  2. DirectSound播放音频应用程序开发快速入门
  3. python 编程中字典排序的方法
  4. 抖音python课程价格_刷个抖音的功夫,就能学把Python学了,微软入门课GitHub热榜第一...
  5. Eclipse开发初阶之Eclipse多国语言包安装
  6. 爱数之备份存储柜3.5硬件介绍
  7. CentOS 7查看系统版本及查看机器位数x86-64
  8. mysql 行级锁的使用
  9. 简易的服务器接口开发入门教程
  10. java3d酷眩贪吃蛇下载,100行JS实现HTML5的3D贪吃蛇游戏