`
zhaichao5566
  • 浏览: 2991 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA中HTTP的多线程下载程序

阅读更多
  1. public class DownloadNetTest {  
  2.    private File fileOut;  
  3.    private URL url;  
  4.    private long fileLength=0;  
  5.    //初始化线程数  
  6.    private int ThreadNum=5;  
  7.    public DownloadNetTest(){  
  8.    try{  
  9.       System.out.println("正在链接URL");  
  10.       url=new URL("http://211.64.201.201/uploadfile/nyz.mp3");  
  11.       HttpURLConnection urlcon=(HttpURLConnection)url.openConnection();  
  12.       fileLength=urlcon.getContentLength();  
  13.       if(urlcon.getResponseCode()>=400){  
  14.       System.out.println("服务器响应错误");  
  15.       System.exit(-1);  
  16.       }  
  17.       if(fileLength<=0)  
  18.       System.out.println("无法获知文件大小");  
  19.       //打印信息  
  20.       printMIME(urlcon);  
  21.       System.out.println("文件大小为"+fileLength/1024+"K");  
  22.       //获取文件名  
  23.       String trueurl=urlcon.getURL().toString();  
  24.       String filename=trueurl.substring(trueurl.lastIndexOf('/')+1);  
  25.       fileOut=new File("D://",filename);  
  26.    }  
  27.    catch(MalformedURLException e){  
  28.       System.err.println(e);  
  29.    }  
  30.    catch(IOException e){  
  31.       System.err.println(e);  
  32.    }  
  33.    init();  
  34. }  
  35.    private void init(){  
  36.       DownloadNetThread [] down=new DownloadNetThread[ThreadNum];  
  37.    try {  
  38.       for(int i=0;i<ThreadNum;i++){  
  39.          RandomAccessFile randOut=new RandomAccessFile(fileOut,"rw");  
  40.          randOut.setLength(fileLength);  
  41.          long block=fileLength/ThreadNum+1;  
  42.          randOut.seek(block*i);  
  43.          down[i]=new DownloadNetThread(url,randOut,block,i+1);  
  44.          down[i].setPriority(7);  
  45.          down[i].start();  
  46.       }  
  47.    //循环判断是否下载完毕  
  48.    boolean flag=true;  
  49.    while (flag) {  
  50.       Thread.sleep(500);  
  51.       flag = false;  
  52.       for (int i = 0; i < ThreadNum; i++)  
  53.       if (!down[i].isFinished()) {  
  54.       flag = true;  
  55.       break;  
  56.       }  
  57.   }// end while  
  58.    System.out.println("文件下载完毕,保存在"+fileOut.getPath() );  
  59.    } catch (FileNotFoundException e) {  
  60.          System.err.println(e);  
  61.          e.printStackTrace();  
  62.    }  
  63.    catch(IOException e){  
  64.       System.err.println(e);  
  65.       e.printStackTrace();  
  66.    }  
  67.    catch (InterruptedException e) {  
  68.    System.err.println(e);  
  69.    }  
  70. }  
  71. private void printMIME(HttpURLConnection http){  
  72.    for(int i=0;;i++){  
  73.    String mine=http.getHeaderField(i);  
  74.    if(mine==null)  
  75.    return;  
  76.    System.out.println(http.getHeaderFieldKey(i)+":"+mine);  
  77.    }  
  78. }  
  79. public static void main(String[] args) {  
  80.        DownloadNetTest app=new DownloadNetTest();  
  81. }  
  82. }  

http://www.xiangw.com

分享到:
评论

相关推荐

    java写的多线程下载程序源码

    Java编写的多线程下载程序源码是一种利用Java语言特性实现高效大文件下载的技术。在这一程序中,主要涉及到了Java的多线程处理和网络编程两大核心知识点。 首先,让我们深入理解Java的多线程。Java提供了丰富的多...

    java http多线程下载器

    在多线程下载中,大文件会被分割成多个小块,每个线程负责下载一个或多个块。为了做到这一点,我们需要确定文件的总大小,然后计算出每个块的起始和结束位置。在HTTP请求中,通过设置`Range`头字段,我们可以指定...

    java多线程之赛马程序实验8多线程练习下载进度

    本实验"java多线程之赛马程序实验8多线程练习下载进度"聚焦于如何利用多线程来模拟实际场景中的下载进度显示。在这一过程中,我们将探讨Thread类的`run`和`start`方法,以及如何通过进度条来可视化表示下载过程。 ...

    Java多线程下载器

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

    另外一个java多线程下载程序源代码

    在这个“另外一个java多线程下载程序源代码”中,我们可以深入学习如何利用Java的多线程特性来创建一个高效的文件下载应用。 首先,我们了解Java中创建线程的两种主要方式: 1. 继承`Thread`类:自定义一个新的类...

    java多线程聊天程序

    Java多线程聊天程序是一种利用Java编程语言设计的实时通讯应用,它利用图形用户界面(GUI)提供交互式用户体验,并通过Socket进行网络通信。在这个程序中,多线程技术是核心,因为它允许并发处理,使得用户可以同时...

    JAVA单线程多线程

    ### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...

    Java多线程测试程序,

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。在本项目中,“Java多线程测试程序”利用了这一特性,结合图形用户界面(GUI)框架JFrame,实现了企鹅在界面上的动态...

    java多线程小汽车运行程序

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在这个名为"java多线程小汽车运行程序"的项目中,我们可以看到一个利用Java实现的多线程应用程序,可能是模拟汽车...

    java多线程下载器

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

    java多线程控制的赛跑程序

    这个“java多线程控制的赛跑程序”是一个示例,展示了如何利用多线程来模拟一场赛跑比赛。在这个程序中,每个参赛者(线程)都有自己的运行逻辑,通过线程的并发执行来模拟实际的赛跑过程。接下来,我们将深入探讨...

    java多线程简单下载器

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

    Java实现的多线程下载工具

    Java实现的多线程下载工具是一种利用Java编程语言来提高文件下载效率的技术。在传统的单线程下载方式中,文件的下载过程由一个线程执行,可能会受到网络波动、服务器响应速度等因素的影响,导致下载速度慢且不稳定。...

    (Java)FTP多线程下载源代码

    实现了FTP多线程下载,并有简单的包括进度条的界面,代码的运行:1 把自己的PC配置成FTP服务器(只需下载Serc-U软件)2 建立用户,用户名:zhangyu,密码:123,设置根目录,并拷贝进一些文件(这就是FTP服务器上的要...

    Java多线程下载

    在Java多线程下载中,我们需要考虑以下几个关键知识点: 1. **文件分块**:确定文件的大小并将其分割成若干个相等或不等的块。每个块对应一个线程,线程负责下载该块的数据。 2. **线程池管理**:使用`...

    java面板多线程发牌程序

    在这个程序中,Java的Swing库被用来创建窗口面板,而多线程技术则用于实现发牌过程的并发执行,确保程序的响应性和流畅性。 首先,让我们深入了解Java的Swing库。Swing是Java的标准GUI工具包,提供了丰富的组件,如...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    javad多线程

    Java 多线程编程是指在一个程序中可以运行多个线程,以提高程序的执行效率和响应速度。在 Java 中,多线程编程可以通过 Thread 类和 Runnable 接口来实现。 为什么需要多线程? 在单线程程序中,如果某个任务需要...

    java 多线程下载 (单文件)

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

    java多线程小程序实例

    java多线程小程序实例 java多线程小程序实例

Global site tag (gtag.js) - Google Analytics