断点传续实现文件下载进度条

文章目录

  • 断点传续实现文件下载进度条
    • 断点传续服务端代码
    • 断点传续客户端代码

断点传续服务端代码

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;// 断点续传服务端
public class FTPServer  {// 文件发送线程class Sender extends Thread{// 网络输入流private InputStream in;// 网络输出流private OutputStream out;// 下载文件名private String filename;public Sender(String filename, Socket socket){try {this.out = socket.getOutputStream();this.in = socket.getInputStream();this.filename = filename;} catch (IOException e) {e.printStackTrace();}}@Overridepublic void run() {try {System.out.println("start to download file!");int temp = 0;StringWriter sw = new StringWriter();while((temp = in.read()) != 0){sw.write(temp);//sw.flush();}// 获取命令String cmds = sw.toString();System.out.println("cmd : " + cmds);if("get".equals(cmds)){// 初始化文件File file = new File(this.filename);RandomAccessFile access = new RandomAccessFile(file,"r");//StringWriter sw1 = new StringWriter();while((temp = in.read()) != 0){sw1.write(temp);sw1.flush();}System.out.println(sw1.toString());// 获取断点位置int startIndex = 0;if(!sw1.toString().isEmpty()){startIndex = Integer.parseInt(sw1.toString());}long length = file.length();byte[] filelength = String.valueOf(length).getBytes();out.write(filelength);out.write(0);out.flush();// 计划要读的文件长度//int length = (int) file.length();//Integer.parseInt(sw2.toString());System.out.println("file length : " + length);// 缓冲区10KBbyte[] buffer = new byte[1024*10];// 剩余要读取的长度int tatol = (int) length;System.out.println("startIndex : " + startIndex);access.skipBytes(startIndex);while (true) {// 如果剩余长度为0则结束if(tatol == 0){break;}// 本次要读取的长度假设为剩余长度int len = tatol - startIndex;// 如果本次要读取的长度大于缓冲区的容量if(len > buffer.length){// 修改本次要读取的长度为缓冲区的容量len = buffer.length;}// 读取文件,返回真正读取的长度int rlength = access.read(buffer,0,len);// 将剩余要读取的长度减去本次已经读取的tatol -= rlength;// 如果本次读取个数不为0则写入输出流,否则结束if(rlength > 0){// 将本次读取的写入输出流中out.write(buffer,0,rlength);out.flush();} else {break;}// 输出读取进度//System.out.println("finish : " + ((float)(length -tatol) / length) *100 + " %");}//System.out.println("receive file finished!");// 关闭流out.close();in.close();access.close();}} catch (IOException e) {e.printStackTrace();}super.run();}}public void run(String filename, Socket socket){// 启动接收文件线程new Sender(filename,socket).start();}public static void main(String[] args) throws Exception {// 创建服务器监听ServerSocket server = new ServerSocket(8888);// 接收文件的保存路径
//        String filename = "F:\\test\\Kafka.pdf";
//        for(;;){//            Socket socket = server.accept();
//            new FTPServer().run(filename, socket);
//        }List<File> getallfile = Demo2.getallfile("F:\\Demo");for (File file : getallfile) {String path = file.getPath();for(;;) {Socket socket = server.accept();new FTPServer().run(path, socket);}}}
}

断点传续客户端代码

import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.List;// 断点续传客户端
public class FTPClient {/***  request:get0startIndex0*  response:fileLength0fileBinaryStream** @param filepath* @throws Exception*/public void Get(String filepath) throws Exception {Socket socket = new Socket();// 建立连接socket.connect(new InetSocketAddress("127.0.0.1", 8888));// 获取网络流OutputStream out = socket.getOutputStream();InputStream in = socket.getInputStream();// 文件传输协定命令byte[] cmd = "get".getBytes();out.write(cmd);out.write(0);// 分隔符int startIndex = 0;// 要发送的文件File file = new File(filepath);if(file.exists()){startIndex = (int) file.length();}System.out.println("Client startIndex : " + startIndex);// 文件写出流RandomAccessFile access = new RandomAccessFile(file,"rw");// 断点out.write(String.valueOf(startIndex).getBytes());out.write(0);out.flush();// 文件长度int temp = 0;StringWriter sw = new StringWriter();while((temp = in.read()) != 0){sw.write(temp);sw.flush();}int length = Integer.parseInt(sw.toString());System.out.println("Client fileLength : " + length);// 二进制文件缓冲区byte[] buffer = new byte[1024*10];// 剩余要读取的长度int tatol = length - startIndex;//access.skipBytes(startIndex);while (true) {// 如果剩余长度为0则结束if (tatol == 0) {break;}// 本次要读取的长度假设为剩余长度int len = tatol;// 如果本次要读取的长度大于缓冲区的容量if (len > buffer.length) {// 修改本次要读取的长度为缓冲区的容量len = buffer.length;}// 读取文件,返回真正读取的长度int rlength = in.read(buffer, 0, len);// 将剩余要读取的长度减去本次已经读取的tatol -= rlength;// 如果本次读取个数不为0则写入输出流,否则结束if (rlength > 0) {// 将本次读取的写入输出流中access.write(buffer, 0, rlength);} else {break;}System.out.println("finish : " + ((float)(length -tatol) / length) *100 + " %");}System.out.println("finished!");// 关闭流access.close();out.close();in.close();}public static void main(String[] args) {FTPClient client = new FTPClient();
//        try {//            client.Get("F:\\test\\test1\\1.pdf");
//        } catch (Exception e) {//            e.printStackTrace();
//        }List<File> getallfile = Demo2.getallfile("F:\\Demo");for (File file : getallfile) {String name = file.getName();String filepath = "F:\\test\\"+name;try {client.Get(filepath);} catch (Exception e) {e.printStackTrace();}}}
}![在这里插入图片描述](https://img-blog.csdnimg.cn/2459bcef8b594383a928ad6a8a93a72e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOaYr1FR5ZWK,size_20,color_FFFFFF,t_70,g_se,x_16)

断点续传实现文件下载进度条相关推荐

  1. Android中下载进度条格式,Android开发如何实现文件下载进度条

    释放双眼,带上耳机,听听看~! 今天和小编狗在这里学习下载进度的实现吧,这段代码是网上找的,自己做了些小改,通过模拟器测试.文件下载进度条控制(就是为了高清壁纸加个进度条),自己研究了好久,但是进度条 ...

  2. 如何实现文件下载进度条呢?

    比如有时候我们在利用python下载文件的时候,通常情况下,文件下载过程我们是感知不到的,只有等文件下载完成,我们才能知道,该文件已经下载完成,假如此时下载文件很大,下载时间就会比较漫长,如果这时候有 ...

  3. Python展示文件下载进度条

    Python展示文件下载进度条 前言 requests 思考 只需要安装一个库即可 大家好!我是晨晨

  4. android 下载进度条代码实现,Android 文件下载进度条的实现

    Android 中很多地方都需要用到线程下载.下面我谢了个简单的下载图片的demo.望对你们有到帮助. 首先,配置权限, 在 AndroidManifest.xml里面的application节点下面 ...

  5. 断点续传(视频进度条拖动以及flv.js需要断点续传)

    目前遇到2种场景需要用到断点续传 视频进度条无法正常拖动,或拖动视频未发生变化,F12请求头中可以看到"Range". 使用B站开源组件flv.js只可以播放3分钟视频,想要解决就 ...

  6. android 下载进度条代码实现,Android文件下载进度条的实现代码

    搜索热词 main.xml: android:orientation="vertical" android:layout_width="fill_parent" ...

  7. vue文件下载进度条

    Step1:封装download方法 // 通用下载方法 export function download(url, params, filename) {let downProgress = {}l ...

  8. vue项目实现文件下载进度条

    下载文件所需要的接口: onDownloadProgress : function(ProgressEvent) {ss(ProgressEvent)} 用ss函数将onDownloadProgres ...

  9. python下载文件进度图表_【python 】文件下载进度条(装逼利器)

    原博文 2020-04-23 11:19 − 基础版 import requests url = "http://mp.111ttt.cn/mp3free/81135985.mp3" ...

  10. 带进度条的ASP无组件断点续传下载代码

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%Option Explicit%> <% '= ...

最新文章

  1. Asp.Net 上传大文件
  2. 在Eclipse上通过插件获取github上的spring源码
  3. P7920-[Kubic]Permutation
  4. centos6安装mysql权限被拒绝_CentOS6.6安装mysql出现的问题
  5. mysql 乱码解决方案
  6. linux系统设置服务开机启动3种方法,Linux开机启动程序详解
  7. win10samba服务器配置_win10访问samba配置共享目录,踩坑记
  8. 滤波ad毛刺 c语言算法,Σ-Δ型ADC AD7124和AD717x的后置/增强型滤波器
  9. 架构设计实践五部曲(一):架构与架构图
  10. 如何测身高未来身高计算机,父母身高测孩子身高公式
  11. PS怎样去掉图片上的文字
  12. html批量转换ppt,将ppt批量转换成图片(一张幻灯片转成一张图片)
  13. 软考笔记——第七章--数据结构
  14. 网页报错404原因及解决方法
  15. 关于VS中LNK1120与errorLNK2019问题
  16. 矩阵幂之和(矩阵乘法)
  17. 解决ReliefJet需要激活而不能再使Outlook点X时最小化的问题
  18. linux查看服务端口命令大全
  19. 面向对象程序设计_Task4_Calculator1.1
  20. matlab 测量矩阵,压缩感知中的常见测量矩阵及其MATLAB实现代码

热门文章

  1. 如何用html和css制作网页,html和css如何实现制作一个网页
  2. 对计算机专业学科的认识1000字,计算机专业1000字实习报告
  3. 管道无损检测python_初用python-docx
  4. arm9处理器 java_ARM处理器系列介绍
  5. InstallShield Crack,虚拟应用程序构建可靠
  6. STM32CubeMX驱动4脚OLED模块
  7. vulnhub-DC-9靶机渗透记录(适合新手详细版)
  8. mysql nutch_nutch2.2+mysql部署
  9. 项目盈利模式分析报告
  10. 基于R语言的数据分析报告