Java多线程下载工具,多线程,多任务,断点续传,GUI

目录

一、题目要求 

二、效果展示

三、功能实现

四、代码


一、题目要求 

序号

功能名称

功能需求标识

简要描述

1

下载功能

Download

当用户输入一个下载链接后,能识别链接并开始多线程下载工作,包括线程监听、线程管理等。

  2

续传功能

Pause

提供一个简单的续传功能,当用户因为某种原因暂停了下载任务,下次能够从断点继续下载,不必从头开始。

  3

数据显示

Data display

显示当前文件已下载的时间,和大约完成全部下载所需剩余时间及当前下载速率。

  4

删除功能

Delete

删除当前任务,释放系统资源

5

分块组装

Divide

Rebuild

根据下载资源大小启动适当进程进行下载,然后将各线程所下载的块组装在一起成完整的目标文件。

在下载软件中应用多线程技术可以理解为将一个下载任务分成若干份来完成,可以提高CPU 和带宽的利用率,其中的并发控制将使下载的效率大大提高,从而提高下载速度。在下载过程中可能会出现很多的意外情况使下载中断或停止,为避免当用户重新下载资源时发现原来下载的数据已经消失而要重新开始的问题,使用断点续传来解决该问题。断点续传的任务是在下载任务停止时,记录当前下载的信息并且利用网络协议中的一些重定向机制继续完成下载任务而不必从头再来。系统的需求可以总结为:

1)支持多线程下载

2)支持多任务下载

3)支持断点续传

4)有一个易操作的可视化界面

5)采用JAVA语言开发

二、效果展示

主窗口设计

对输入数据的检测

下载任务窗口

新建下载/继续下载

多任务下载(主窗口运行时状态[左],下载任务窗口运行时状态[右,2个])

暂停

三、功能实现

下载线程:每个下载线程都记录着下载地址(URL)、保存地址、初始下载地址、结束下载地址、输入输出流、线程是否运行标志、已经下载字节数等信息,当运行下载线程后,这个线程将读取相应范围内的数据并写入文件中。

多任务下载:封装任务类,每个任务类中记录着下载地址(URL)、保存地址、下载线程数组、监控线程、下载的对话框、是否时断点续传、线程数量、每个线程已经下载的字节数(当断点续传时)、文件长度、是否正在下载等信息,每次新建下载任务都会初始化一个任务对象,然后这个对象运行下载线程和监控线程。

下载任务监控线程:每个下载任务中都包括一个监控和线程,监控和线程每隔一秒会检查每个下载线程的下载情况,并实时计算出下载的完成百分比、已下载的大小、下载速度、已下载时间、预计下载剩余时间等信息,并实时显示在对话框上。

主监控线程:与下载任务监控线程相似,主监控线程是监控所有的下载任务,并实时计算出所有任务下载的完成百分比、已下载的大小、下载速度、已下载时间、预计下载剩余时间等信息,并实时显示在对话框上。

新建任务:输入下载地址,输入下载线程数量,点击新建任务选择保存文件地址,在点击开始,就会弹出下载任务的对话框,从而创建一个下载任务。

暂停任务:点击暂停任务后,将文件下载地址、保存地址、线程数量、每个线程已经下载的字节数保存到文件(.cfg)中,然后结束下载任务。

继续下载:点击继续下载,弹出对话框选择相应的.cfg文件,点击开始,创建下载任务。

继续:在下载任务窗口点击暂停后,可点击继续按钮继续下载。

删除:当点击叉号时会删除当前任务、释放系统资源。

四、代码

【免费】Java多线程下载器,多线程,多任务,断点续传资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/m0_71534259/89447747

1.得到服务器下载文件的大小,然后在本地设置一个临时文件和服务器端文件大小一致 a)获得访问网络地址 b)通过URL对象的openConnection()方法打开连接,返回一个连接对象 c)设置请求头 i.setRequestMethod ii.setConnectTimeout iii.setReadTimeout d)判断是否响应成功 e)获取文件长度(getContentLength()) f)随机访问文件的读取与写入RandomAccessFile(file, mode) g)设置临时文件与服务器文件大小一致(setLength()) h)关闭临时文件 2.计算出每个线程下载的大小(开始位置,结束位置) a)计算出每个线程下载的大小 b)for循环,计算出每个线程的开始、结束位置 c)最后一个线程处理 3.每创建好一次就要开启线程下载 a)构造方法 b)通过URL对象的openConnection()方法打开连接,返回一个连接对象 c)设置请求头 i.setRequestMethod ii.setConnectTimeout d)判断是否响应成功(206) e)获取每个线程返回的流对象 f)随机访问文件的读取与写入RandomAccessFile(file, mode) g)指定开始位置 h)循环读取 i.保存每个线程下载位置 ii.记录每次下载位置 iii.关闭临时记录位置文件 iv.随机本地文件写入 v.记录已下载大小 i)关闭临时文件 j)关闭输入流 4.为了杀死线程还能继续下载的情况下,从本地文件上读取已经下载文件的开始位置 a)创建保存记录结束位置的文件 b)读取文件 c)将流转换为字符 d)获取记录位置 e)把记录位置赋给开始位置 5.当你的n个线程都下载完毕的时候我进行删除记录下载位置的缓存文件 a)线程下载完就减去 b)当没有正在运行的线程时切文件存在时删除文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值