Skip to content

yuansuqing/PowerDownLoad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

PowerDownLoad

多线程断点续传下载器 - Multi-threaded downloader with resume support

PowerDownLoad - 多线程断点续传下载器

📖 项目简介

仅使用Java基础知识开发

大一学生的小小项目,仅供学习使用。

一个基于 Java 的多线程 HTTP/HTTPS 文件下载工具,支持断点续传、分块下载和实时进度显示。

✨ 主要特性

  • 🚀 多线程下载:支持多个线程同时下载文件的不同分块,提升下载速度
  • 🔄 断点续传:下载中断后可从已下载位置继续,无需重新开始
  • 📊 实时进度:每秒显示下载进度、速度和剩余时间
  • 🔒 线程安全:使用 LongAdder 保证多线程环境下的计数准确性
  • 完整性验证:下载完成后自动验证文件大小,确保数据完整
  • 🎯 智能重试:检测未完成文件并自动继续下载

🛠️ 技术栈

  • 语言:Java 8+
  • 核心库
    • java.net.HttpsURLConnection - HTTP 连接
    • java.util.concurrent - 线程池管理
    • java.io.RandomAccessFile - 文件随机访问
    • java.util.concurrent.atomic.LongAdder - 线程安全计数器

📦 项目结构

PowerDownLoad/ ├ ── src/com/bipowerdownlaod/ │ ├── Main.java # 主入口类 │ ├── Constant/ │ │ └── constant.java # 常量配置 │ ├── core/ │ │ ├── Downloader.java # 下载调度器 │ │ ├── DownloaderTask.java # 下载任务(Callable) │ │ └── DownloadInfoThread.java # 进度监控线程 │ └── util/ │ ├── HttpUtils.java # HTTP 工具类 │ ├── FileUtils.java # 文件工具类 │ └── LogUtils.java # 日志工具类 ├── 实验下载检测包/ # 下载文件保存目录(已在 .gitignore 中忽略) └── README.md

运行

方式一:交互式输入 URL

方式二:命令行参数

💡 使用示例

请输入下载地址: https://example.com/largefile.zip
开始下载... URL: https://example.com/largefile.zip 文件名: largefile.zip 保存路径: E:\downloads
分块 0:0 - 20971520 分块 1:20971521 - 41943041 分块 2:41943042 - 62914562 分块 3:62914563 - 83886083 分块 4:83886084 - 文件末尾
已下载:50.25MB/295.71MB (16.99%) 5488kb/s 剩余:45.2s 已下载:100.50MB/295.71MB (33.98%) 5600kb/s 剩余:35.1s ...
线程 0 下载完成,写入 20971521 bytes (0 - 20971520) 线程 2 下载完成,写入 20971521 bytes (41943042 - 62914562) ...
下载完成 ✅ 文件下载成功,大小验证通过! 下载完成,耗时:0时 1分 30秒
    
    

🔧 核心设计

多线程分块下载

  1. 文件分块:将文件平均分成 N 个块(N = 线程数)
  2. 并行下载:每个线程负责一个分块的下载
  3. RandomAccessFile:使用 seek() 定位到对应位置写入数据
  4. Range 头:HTTP Range 请求指定字节范围

断点续传机制

  1. 检测本地文件大小
  2. 如果文件部分存在,从已完成位置继续下载
  3. 使用 finishSize 记录已下载部分
  4. 重新计算剩余分块

进度监控

  • 独立的定时线程每秒执行一次
  • 计算瞬时速度、剩余时间、下载百分比
  • 使用 volatile 保证变量可见性

⚠️ 注意事项

  1. 路径配置:首次使用前请修改 constant.java 中的 PATH 为你的下载目录
  2. 线程数选择:线程数不是越多越好,建议 3-8 个,根据网络情况调整
  3. 服务器支持:需要服务器支持 HTTP Range 请求才能实现分块下载
  4. 磁盘空间:确保有足够的磁盘空间存储下载文件

🐛 已知问题

  • 静态计数器在多次调用时需要手动重置
  • 暂不支持动态调整线程数
  • 暂无暂停/恢复功能(仅支持断点续传)

📄 许可证

本项目仅供学习交流使用。

👨‍💻 作者 元素氢

Built with ❤️ by Bipowerdownlaod


⭐ 如果这个项目对你有帮助,请给个 Star!

About

多线程断点续传下载器 - Multi-threaded downloader with resume support

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors