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

java 多线程下载文件

阅读更多
来自:http://www.oschina.net/code/snippet_725077_13424


import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

public class MultiThreadDownFile {
public static void main(String[] args) {
try {
String filePath = "http://dl_dir.qq.com/qqfile/qd/QQ2012Beta3_QQProtect2.8.exe";
int threadNum = 5;
new MultiThreadDown().down(filePath, threadNum);
} catch (Exception e) {
e.printStackTrace();
}
}
}

class MultiThreadDown extends Thread {

private int threadId;
private int block;
private URL url;
private File file;

public MultiThreadDown() {
}

public MultiThreadDown(int threadId, int block, URL url, File file) {
super();
this.threadId = threadId;
this.block = block;
this.url = url;
this.file = file;
}

public void down(String path, int threadNum) throws Exception {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
try {
if (conn.getResponseCode() == 200) {
int fileLength = conn.getContentLength();// Get the length of
// NetFile
System.out.println("网络文件大小:" + fileLength);
File file = new File(getFilename(path));
RandomAccessFile raf = new RandomAccessFile(file, "rwd");
raf.setLength(fileLength);
raf.close();
// 计算每条线程的下载量
int block = fileLength % threadNum == 0 ? fileLength
/ threadNum : fileLength / threadNum + 1;
for (int threadId = 0; threadId < threadNum; threadId++) {
new MultiThreadDown(threadId, block, url, file).start();
System.out.println("线程" + threadId + "开始");
}
} else {
System.out.println("Connection failed.");
}
} catch (Exception e) {
System.out.println("连接失败.");
e.printStackTrace();
}
}

private String getFilename(String path) {
return path.substring(path.lastIndexOf("/") + 1);
}

@Override
public void run() {
super.run();
int start = threadId * block;// 计算线程下载的网络文件的文件位置
int end = (threadId + 1) * block - 1;// 线程的结束位置
try {
RandomAccessFile raf = new RandomAccessFile(file, "rwd");
raf.seek(start);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
conn.setRequestProperty("Range", "bytes=" + start + "-" + end);
if (conn.getResponseCode() == 206) {
InputStream is = conn.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while ((len = is.read(buf)) != -1) {
raf.write(buf, 0, len);
}
raf.close();
is.close();
}
System.out.println("第" + threadId + "线程下载完毕");
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
评论

相关推荐

    java多线程下载文件

    在“java多线程下载文件”的场景下,主要涉及到以下几个关键知识点: 1. **线程**:Java中的线程是程序执行的最小单位,通过创建和管理线程,可以让一个程序同时执行多个任务。在Java中,可以通过继承`Thread`类或...

    java实现多线程下载文件

    通过以上步骤,我们可以设计并实现一个高效的多线程文件下载系统。在实际项目中,还可以考虑使用成熟的库,如Apache HttpClient或OkHttp,它们提供了对多线程下载的良好支持。同时,结合Java的并发库,可以构建出更...

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    Android Java 多线程下载文件 demo

    在Android平台上,Java多线程下载文件是一种常见的优化方法,特别是在处理大文件或者网络环境不稳定时,能够提高下载效率并减少资源消耗。本教程将详细解释如何实现这一功能。 首先,理解多线程下载的基本原理。...

    Java多线程文件下载

    Java多线程文件下载是一种高效的下载策略,它通过将大文件分割成多个部分,然后创建多个线程分别下载这些部分,来实现并行下载。这种技术可以显著提高下载速度,尤其是在网络条件不稳定或者带宽有限的情况下。下面...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    java多线程下载文件源码

    在Java编程中,多线程下载文件是一种优化大文件下载效率的技术。它通过将一个大文件分割成多个小部分,然后在不同的线程中并行下载这些部分,从而充分利用网络带宽,加快下载速度。本源码实现了这样一个功能,让下载...

    Java多线程下载器

    Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个部分并同时下载,显著提高了下载速度。在Java中实现多线程下载器涉及许多关键概念和技术,包括线程、并发控制、网络I/O...

    java 多线程下载 (单文件)

    Java多线程下载技术主要应用于提高大文件下载的效率,通过将文件分割成多个部分,同时启动多个线程分别下载这些部分,从而实现并行下载,加快下载速度。以下是对这个主题的详细解释: 1. **Java多线程基础**: 在...

    Java多线程下载

    Java多线程下载技术是Java开发中用于提升大文件下载效率的一种常见方法。在传统的单线程下载过程中,网络请求可能会因为各种原因中断,如网络波动、服务器问题或用户操作等,这会导致需要从头开始下载,浪费时间和...

    Java多线程下载文件实现案例详解

    "Java多线程下载文件实现案例详解" Java多线程下载文件实现案例详解是Java多线程编程中的一种常见应用场景。本文将通过示例代码对Java多线程下载文件实现案例进行详细的解释,对大家的学习或者工作具有一定的参考...

    java多线程下载器

    Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个小部分,然后创建多个线程同时下载这些部分,以提高下载速度。这种技术在处理大文件或者网络带宽有限的情况下尤其有用,...

    java多线程简单下载器

    【Java多线程简单下载器】是一个初学者的编程作业,虽然代码可能较为混乱,但其核心功能已经实现,即通过多线程技术进行文件的下载。在Java中,多线程是并发处理的重要手段,它允许多个任务在同一时间执行,从而提高...

    java多线程下载源代码

    Java多线程下载是利用Java编程语言实现的一种高效下载大文件的技术。在传统的单线程下载方式中,如果网络环境不稳定或文件较大,下载过程可能会很慢,甚至中断。而多线程下载则是将文件分割成多个部分,每个部分由一...

    Java多线程文件分片下载实现的示例代码

    Java多线程文件分片下载实现的示例代码 本文将详细介绍Java多线程文件分片下载的实现示例代码,通过示例代码,大家可以学习和理解多线程文件分片下载的技术难点和解决方案。 多线程下载的技术难点 ---------------...

    java多线程下载图片

    在这个场景中,"java多线程下载图片"意味着我们将探讨如何使用Java来实现一个能够异步下载多个图片的系统。 首先,我们需要理解Java中的线程是如何创建和运行的。Java提供了两种创建线程的方式:继承Thread类和实现...

    Java 利用多线程实现文件的分片下载

    刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...

    Java 多线程下载网站

    这个Java多线程下载网站项目结合了网络编程、HTML解析、文件操作等多个Java核心概念,对于提升Java程序员的全栈开发能力具有很高的实践价值。通过学习和实践这个项目,开发者不仅可以掌握多线程下载的技巧,还能深入...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

Global site tag (gtag.js) - Google Analytics