Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 605|回复: 0

用java写的一个断点下载工具 有错误 求各位大神帮忙看看

[复制链接]

该用户从未签到

发表于 2014-6-26 09:27:32 | 显示全部楼层 |阅读模式
3Java金币
  1. import java.io.BufferedInputStream;
  2. import java.io.DataOutputStream;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.RandomAccessFile;
  7. import java.net.*;
  8. /**
  9. * 文件传送客户端:获取远程文件
  10. */
  11. public class GetRemoteFile_Client_GoOn
  12. {
  13.   public GetRemoteFile_Client_GoOn()
  14.   {
  15.   }

  16.   private boolean FileExist(String pathAndFile)//确定文件是否已经下载,但没有下载完成
  17.   {
  18.     File file = new File(pathAndFile);
  19.     if (file.exists())
  20.       return true;
  21.     else
  22.       return false;
  23.   }

  24.   private long FileSize(String pathAndFile)//确定已经下载了的文件大小
  25.   {
  26.     File file = new File(pathAndFile);
  27.     return file.length();
  28.   }
  29.   private void FileRename(String fName,String nName)//将下载完全的文件更名,去掉.tp名
  30.   {
  31.     File file = new File(fName);
  32.     file.renameTo(new File(nName));
  33.     file.delete();
  34.   }
  35.   public static void main(String[] args)
  36.   {
  37.     URL url = null;
  38.     HttpURLConnection urlc = null;
  39.     DataOutputStream dos = null;
  40.     BufferedInputStream bis = null;
  41.     FileOutputStream fos = null;
  42.     String localFile = "d://x.x";//文件保存的地方及文件名,具体情况可以改
  43.     String localFile_bak = localFile + ".tp";//未下载完文件加.tp扩展名,以便于区别
  44.     GetRemoteFile_Client_GoOn gco = new GetRemoteFile_Client_GoOn();
  45.     long fileSize = 0;
  46.     long start = System.currentTimeMillis();
  47.     int len = 0;
  48.     byte[] bt = new byte[1024];
  49.     //byte[] buffer=new byte[50*1024];
  50.     RandomAccessFile raFile=null;
  51.     long TotalSize=0;//要下载的文件总大小
  52.     try
  53.     {
  54.       url = new URL("http://www.netbox.cn/download/nbsetup.EXE");     
  55.       urlc = (HttpURLConnection) url.openConnection();
  56.       TotalSize=Long.parseLong(urlc.getHeaderField("Content-Length"));
  57.       System.out.println("下载文件大小为:"+TotalSize);
  58.       urlc.disconnect();//先断开,下面再连接,否则下面会报已经连接的错误
  59.       urlc = (HttpURLConnection) url.openConnection();
  60.       //确定文件是否存在
  61.       if (gco.FileExist(localFile_bak))//采用断点续传,这里的依据是看下载文件是否在本地有.tp有扩展名同名文件
  62.       {
  63.         System.out.println("文件续传中...");
  64.         fileSize = gco.FileSize(localFile_bak); //取得文件在小,以便确定随机写入的位置
  65.         System.out.println("fileSize:"+fileSize);
  66.         //设置User-Agent
  67.         //urlc.setRequestProperty("User-Agent","NetFox");
  68.         //设置断点续传的开始位置
  69.         urlc.setRequestProperty("RANGE", "bytes="+fileSize+"-");
  70.         //urlc.setRequestProperty("RANGE", "bytes="+fileSize);//这样写不行,不能少了这个"-".
  71.         //设置接受信息
  72.         urlc.setRequestProperty("Accept","image/gif,image/x-xbitmap,application/msword,*/*");      
  73.         raFile=new RandomAccessFile(localFile_bak,"rw");//随机方位读取
  74.         raFile.seek(fileSize);//定位指针到fileSize位置
  75.         bis = new BufferedInputStream(urlc.getInputStream());
  76.         while ((len = bis.read(bt)) > 0)//循环获取文件
  77.         {
  78.           raFile.write(bt, 0, len);
  79.           //buffer=buffer+bt;
  80.           //System.
  81.         }
  82.         System.out.println("文件续传接收完毕!");      
  83.       }
  84.       else//采用原始下载
  85.       {
  86.         fos = new FileOutputStream(localFile_bak); //没有下载完毕就将文件的扩展名命名.bak
  87.         dos = new DataOutputStream(fos);
  88.         bis = new BufferedInputStream(urlc.getInputStream());      
  89.         System.out.println("正在接收文件...");
  90.         int test=0;
  91.         while ((len = bis.read(bt)) > 0)//循环获取文件
  92.         {
  93.           dos.write(bt, 0, len);
  94.           test++;
  95.           if(test==50)//这里是测试,你可以删除这里,就可以正常下载了
  96.             break;
  97.         }      
  98.         //System.out.println("文件正常接收完毕!");
  99.       }     
  100.       System.out.println("共用时:" +
  101.                          (System.currentTimeMillis() - start) / 1000);
  102.       if(bis!=null)
  103.         bis.close();
  104.       if(dos!=null)
  105.         dos.close();
  106.       if(fos!=null)
  107.         fos.close();
  108.       if(raFile!=null)
  109.         raFile.close();
  110.       System.out.println("localFile_bak:"+gco.FileSize(localFile_bak));
  111.       if(gco.FileSize(localFile_bak)==TotalSize)//下载完毕后,将文件重命名
  112.       {
  113.         gco.FileRename(localFile_bak,localFile);
  114.       }
  115.       System.exit(0);
  116.     }
  117.     catch (Exception e)
  118.     {
  119.       try
  120.       {
  121.         if(bis!=null)
  122.           bis.close();
  123.         if(dos!=null)
  124.           dos.close();
  125.         if(fos!=null)
  126.           fos.close();
  127.         if(raFile!=null)
  128.           raFile.close();
  129.       }
  130.       catch (IOException f)
  131.       {
  132.         f.printStackTrace();
  133.       }
  134.       e.printStackTrace();
  135.     }
  136.     System.exit(0);
  137.   }
  138. }



  139. ​错误信息
  140. 下载文件大小为:212
  141. java.io.FileNotFoundException: http://www.netbox.cn/download/nbsetup.EXE
  142.     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1624)
  143.     at one.GetRemoteFile_Client_GoOn.main(GetRemoteFile_Client_GoOn.java:98)

复制代码


回复

使用道具 举报

  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2014-6-27 12:36:23 | 显示全部楼层
    很明显 http://www.netbox.cn/download/nbsetup.EXE 这个文件找不到。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-20 17:11 , Processed in 0.404517 second(s), 33 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表