`
lvwenwen
  • 浏览: 956057 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

多线程断点上传下载类

阅读更多

public class MulThreadDownload {

/**
* @param args
*/
public static void main(String[] args) {
String path = "http://net.itcast.cn/QQWubiSetup.exe";
try {
new MulThreadDownload().download(path, 3);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 从路径中获取文件名称
* @param path 下载路径
* @return
*/
public static String getFilename(String path){
return path.substring(path.lastIndexOf('/')+1);
}
/**
* 下载文件
* @param path 下载路径
* @param threadsize 线程数
*/
public void download(String path, int threadsize) throws Exception{
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
int filelength = conn.getContentLength();//获取要下载的文件的长度
String filename = getFilename(path);//从路径中获取文件名称
File saveFile = new File(filename);
RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd");
accessFile.setLength(filelength);//设置本地文件的长度和下载文件相同
accessFile.close();
//计算每条线程下载的数据长度
int block = filelength%threadsize==0? filelength/threadsize : filelength/threadsize+1;
for(int threadid=0 ; threadid < threadsize ; threadid++){
new DownloadThread(url, saveFile, block, threadid).start();
}
}

private final class DownloadThread extends Thread{
private URL url;
private File saveFile;
private int block;//每条线程下载的数据长度
private int threadid;//线程id

public DownloadThread(URL url, File saveFile, int block, int threadid) {
this.url = url;
this.saveFile = saveFile;
this.block = block;
this.threadid = threadid;
}

@Override
public void run() {
//计算开始位置公式:线程id*每条线程下载的数据长度= ?
    //计算结束位置公式:(线程id +1)*每条线程下载的数据长度-1 =?
int startposition = threadid * block;
int endposition = (threadid + 1 ) * block - 1;
try {
RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd");
accessFile.seek(startposition);//设置从什么位置开始写入数据
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
conn.setRequestProperty("Range", "bytes="+ startposition+ "-"+ endposition);
InputStream inStream = conn.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
while( (len=inStream.read(buffer)) != -1 ){
accessFile.write(buffer, 0, len);
}
inStream.close();
accessFile.close();
System.out.println("线程id:"+ threadid+ "下载完成");
} catch (Exception e) {
e.printStackTrace();
}
}
}

}
分享到:
评论

相关推荐

    一个多线程断点上传文件的功能

    用多线程实现断点上传的功能 DeleteOverThread(); #region 初始化 string backUploadStatus = dr["BACKEND_UPLOAD_STATUS"].ToString(); //是否上传成功或取消 if (backUploadStatus == Status.Upload_...

    socket做的支持多线程断点上传or断点续传

    以上就是使用Java Socket实现多线程断点上传或断点续传的关键知识点。实际开发中,可能还会涉及到其他技术,如FTP、HTTP/HTTPS协议、数据库操作等,但核心思路是利用Socket进行网络通信,通过多线程和断点续传技术...

    FTP 多线程断点上传

    总的来说,多线程FTP断点上传是一项复杂但高效的文件上传技术,它结合了多线程并行处理的优势和断点续传的容错性,是现代FTP客户端软件不可或缺的功能。在实际开发中,需要对网络协议、多线程编程和错误处理有深入的...

    Android多线程文件夹下载及断点续传

    在实现多线程下载和断点续传时,还需要注意以下几点: - **异常处理**:网络中断、文件I/O错误等异常情况需要妥善处理,确保能够恢复下载。 - **线程同步**:在多线程环境下,需要确保线程安全,防止数据竞争和不...

    java 多线程断点续传

    下面将详细探讨如何在Java中实现多线程断点续传。 首先,我们需要理解多线程的概念。在Java中,我们可以使用`Thread`类或`Runnable`接口来创建线程。当一个线程被创建后,它可以与主线程并行运行,每个线程都有自己...

    FTP多线程上传下载、断点续传、分段下载--田景吉之C#版本

    本文将深入探讨在C#环境中实现FTP多线程上传下载、断点续传以及分段下载的技术细节。 首先,让我们理解多线程的概念。在单线程环境下,FTP上传和下载可能受限于网络带宽和处理器的单一执行能力。通过多线程,我们...

    多线程断点续传(基于HTTP协议).zip_http 断点上传_http 断点续传_多线程断点续传_断点上传_断点续传

    同时,"【成品】多线程断点续传工具.jar"可能是一个可执行的Java应用程序,它提供了用户界面或者命令行工具,让用户可以方便地进行断点续传的文件上传。 多线程断点续传进一步提高了文件传输的效率。通过将文件分割...

    java ftp 多线程 断点续传等知识

    而"多线程"和"断点"这两个文件名可能是指相关示例代码或文档,可以进一步帮助你理解和实践Java FTP的多线程下载和断点续传。 在实际应用中,还需要考虑其他因素,如错误处理、网络状况的监控、文件完整性检查等。...

    socket做的支持多线程断点上传or断点续传Java源码

    标题中的“socket做的支持多线程断点上传or断点续传Java源码”涉及到的是在网络编程中,如何使用Java的Socket API实现一个能够处理断点上传和断点续传功能的服务。这是一个高级的网络编程任务,通常在大型文件传输...

    c#多线程断点续传

    在提供的压缩包文件中,可能包含了一个名为“download”的示例项目,这可能是用于演示上述多线程断点续传功能的源代码。通过分析和运行这个项目,你可以更直观地理解这两种技术的结合应用。 总之,多线程和断点续传...

    多线程断点续传工具类

    "多线程断点续传工具类"通常指的是一个Java类,该类设计用于实现文件传输时的多线程功能,并且能够从上次中断的地方继续下载或上传,这在大文件传输中非常有用,因为它可以提高速度并避免因网络问题导致的传输失败。...

    FTP、HTTP 多线程断点续传下载文件.rar

    标题中的“FTP、HTTP 多线程断点续传下载文件.rar”暗示了这是一个关于网络协议(FTP和HTTP)在实现多线程下载时如何支持断点续传功能的资源包。这个压缩文件可能包含了一个或者多个示例程序、文档或教程,用于解释...

    安卓文件下载上传解压相关-工具类支持多线程断点下载.rar

    这个压缩包"安卓文件下载上传解压相关-工具类支持多线程断点下载.rar"包含了一个工具类,旨在帮助开发者处理这些操作。下面将详细讨论相关知识点。 1. 多线程下载: 在Android中,为了提高文件下载速度,通常会采用...

    delphi 多线程断点续传支持超大文件2G以上传输带源码

    总之,"delphi 多线程断点续传支持超大文件2G以上传输带源码"的项目提供了一个实用的解决方案,为使用Delphi开发的软件添加了高效、可靠的超大文件传输能力。对于需要处理大量大文件传输的开发者来说,这是一个宝贵...

    Android 多线程可断点续传上传文件至服务器Demo

    Android 多线程可断点续传上传文件至服务器Demo(Android端编辑器:Android Studio,服务器端编辑器:Eclipse,请注意手机默认下载目录必须要有t007.zip,服务器端必须有D:\temp\temp目录)

    Android 实现多线程断点续传下载 源码

    在Android应用开发中,实现多线程断点续传下载是一项重要的技术,它能提高下载效率,节省用户时间,并提供良好的用户体验。以下是对这个主题的详细解析: **1. 多线程下载** 多线程下载是将一个大文件分成多个小块...

    安卓文件下载上传解压相关-android下载框架支持单线程和多线程断点下载.rar

    本压缩包中的资源涉及到了一个Android文件下载框架,它支持单线程和多线程的断点续传功能。理解这些概念和技术对于Android开发者来说至关重要。 1. **文件下载** 文件下载通常涉及到网络请求和数据流的处理。在...

    VC++ FTP、HTTP 多线程断点续传下载文件源码.rar

    该压缩包文件“VC++ FTP、HTTP 多线程断点续传下载文件源码.rar”包含了一套基于VC++实现的源代码,用于通过FTP和HTTP协议进行多线程断点续传下载文件。这一技术在现代软件开发中非常重要,尤其是在处理大文件或网络...

    java实现FTP多线程断点续传

    ### Java实现FTP多线程断点续传:深入解析与技术要点 在现代软件开发中,数据传输是一项基本且关键的任务,特别是在处理大文件时,断点续传功能显得尤为重要。断点续传允许在网络连接中断后恢复传输,避免了重新...

Global site tag (gtag.js) - Google Analytics