java下载文件

来源:互联网 发布:管家婆端口设置 编辑:程序博客网 时间:2024/05/16 16:09
  1. public GetRemoteFile_Client_GoOn(){  
  2.  
  3.     private boolean FileExist(String pathAndFile){//确定文件是否已经下载,但没有下载完成  
  4.         File file = new File(pathAndFile);  
  5.         if (file.exists())  
  6.           return true;  
  7.         else  
  8.           return false;  
  9.       }  
  10.     private long FileSize(String pathAndFile){//确定已经下载了的文件大小  
  11.         File file = new File(pathAndFile);  
  12.         return file.length();  
  13.       }  
  14.     private void FileRename(String fName,String nName){//将下载完全的文件更名,去掉.tp名  
  15.         File file = new File(fName);  
  16.         file.renameTo(new File(nName));  
  17.         file.delete();  
  18.       }  
  19.     public static void main(String[] args){  
  20.         URL url = null;  
  21.         HttpURLConnection urlc = null;  
  22.         DataOutputStream dos = null;  
  23.         BufferedInputStream bis = null;  
  24.         FileOutputStream fos = null;  
  25.         String localFile = "d:\\XunXian_V2.0.21.1_dl.exe";//文件保存的地方及文件名,具体情况可以改  
  26.         String localFile_bak = localFile + ".tp";//未下载完文件加.tp扩展名,以便于区别  
  27.         GetRemoteFile_Client_GoOn gco = new GetRemoteFile_Client_GoOn();  
  28.         long fileSize = 0;  
  29.         long start = System.currentTimeMillis();  
  30.         int len = 0;  
  31.         byte[] bt = new byte[1024];  
  32.         RandomAccessFile raFile=null;  
  33.         long TotalSize=0;//要下载的文件总大小  
  34.         try{  
  35.           url = new URL("http://down.qq.com/xunxian/full/XunXian_V2.0.21.1_dl.exe");        
  36.           urlc = (HttpURLConnection) url.openConnection();  
  37.           TotalSize=Long.parseLong(urlc.getHeaderField("Content-Length"));  
  38.           System.out.println("下载文件大小为:"+TotalSize);  
  39. //        urlc.disconnect();//先断开,下面再连接,否则下面会报已经连接的错误  
  40.           urlc = (HttpURLConnection) url.openConnection();  
  41.           //确定文件是否存在  
  42.           if (gco.FileExist(localFile_bak)){//采用断点续传,这里的依据是看下载文件是否在本地有.tp有扩展名同名文件  
  43.             System.out.println("文件续传中...");  
  44.             fileSize = gco.FileSize(localFile_bak); //取得文件在小,以便确定随机写入的位置  
  45.             System.out.println("fileSize:"+fileSize);  
  46.             //设置User-Agent  
  47.             //urlc.setRequestProperty("User-Agent","NetFox");  
  48.             //设置断点续传的开始位置  
  49.             urlc.setRequestProperty("RANGE""bytes="+fileSize+"-");  
  50.             //urlc.setRequestProperty("RANGE", "bytes="+fileSize);//这样写不行,不能少了这个"-".  
  51.             //设置接受信息  
  52.             urlc.setRequestProperty("Accept","image/gif,image/x-xbitmap,application/msword,*/*");          
  53.             raFile=new RandomAccessFile(localFile_bak,"rw");//随机方位读取  
  54.             raFile.seek(fileSize);//定位指针到fileSize位置  
  55.             bis = new BufferedInputStream(urlc.getInputStream());  
  56.             while ((len = bis.read(bt)) > 0){//循环获取文件  
  57.               raFile.write(bt, 0, len);  
  58.             }  
  59.             System.out.println("文件续传接收完毕!");          
  60.           }  
  61.           else{//采用原始下载  
  62.             fos = new FileOutputStream(localFile_bak); //没有下载完毕就将文件的扩展名命名.bak  
  63.             dos = new DataOutputStream(fos);  
  64.             bis = new BufferedInputStream(urlc.getInputStream());          
  65.             System.out.println("正在接收文件...");  
  66.             int test=0;  
  67.             while ((len = bis.read(bt)) > 0){//循环获取文件  
  68.               dos.write(bt, 0, len);  
  69.               test++;  
  70.             }          
  71.           }        
  72.           System.out.println("共用时:" +   
  73.                              (System.currentTimeMillis() - start) / 1000);  
  74.           if(bis!=null)  
  75.             bis.close();  
  76.           if(dos!=null)  
  77.             dos.close();  
  78.           if(fos!=null)  
  79.             fos.close();  
  80.           if(raFile!=null)  
  81.             raFile.close();  
  82.           System.out.println("localFile_bak:"+gco.FileSize(localFile_bak));  
  83.           if(gco.FileSize(localFile_bak)==TotalSize){//下载完毕后,将文件重命名  
  84.             gco.FileRename(localFile_bak,localFile);  
  85.           }  
  86.           System.exit(0);  
  87.         }  
  88.         catch (Exception e){  
  89.           try{  
  90.             if(bis!=null)  
  91.               bis.close();  
  92.             if(dos!=null)  
  93.               dos.close();  
  94.             if(fos!=null)  
  95.               fos.close();  
  96.             if(raFile!=null)  
  97.               raFile.close();  
  98.           }  
  99.           catch (IOException f){  
  100.             f.printStackTrace();  
  101.           }  
  102.           e.printStackTrace();  
  103.         }  
  104.         System.exit(0);  
  105. }  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩记忆不好读书记不住怎么办 9岁儿童不爱睡觉怎么办 6岁儿童不爱吃饭怎么办 2岁半宝宝不吃饭怎么办 一年级的孩子不爱学习怎么办 小孩不爱写作业怎么办啊 孩子不爱看书怎么办如何教育 2岁宝宝不爱看书怎么办 儿媳妇比儿子年龄大我不喜欢怎么办 不喜欢儿子却生了儿子怎么办 静不下心来看书怎么办 孩子爱玩不爱学怎么办 孩子爱玩不爱学习怎么办 孩子爱玩手机不爱学习怎么办 照四维宝宝太活泼了怎么办 胎宝宝太活泼了怎么办 7个月宝宝太活泼怎么办 我是个初中生不想上学怎么办 3岁宝宝不肯说话怎么办 两周宝宝不爱吃饭怎么办 小孩不喜欢吃水果蔬菜怎么办 孩子对学习不感兴趣怎么办 幼儿园老师不喜欢我孩子怎么办 孩子数学不主动思考问题怎么办 孩子做事慢磨蹭家长应该怎么办 孩子不写作业怎么办啊 对孩子在校被欺怎么办 二年级的孩子不爱学习怎么办 孩子不爱学习怎么办二年级 二年级孩子不爱写作业怎么办 孩子喜欢的朋友家长不喜欢怎么办? 孩子不喜欢上幼儿园家长怎么办 孩子不喜欢家长学佛怎么办呢? 学生家长讨厌老师老师该怎么办 孩子不爱去幼儿园总是哭怎么办 孩子学习一点都不主动怎么办 孩子怕老师不想上学怎么办 幼儿园孩子怕老师不想上学怎么办 孩子在幼儿园怕老师怎么办 幼儿园老师对孩子有歧视怎么办 儿子在幼儿园受到老师歧视怎么办