java下载远程服务器文件

1 篇文章 0 订阅
1 篇文章 0 订阅
public GetRemoteFile_Client_GoOn(){
	  }
	private boolean FileExist(String pathAndFile){//确定文件是否已经下载,但没有下载完成
	    File file = new File(pathAndFile);
	    if (file.exists())
	      return true;
	    else
	      return false;
	  }
	private long FileSize(String pathAndFile){//确定已经下载了的文件大小
	    File file = new File(pathAndFile);
	    return file.length();
	  }
	private void FileRename(String fName,String nName){//将下载完全的文件更名,去掉.tp名
	    File file = new File(fName);
	    file.renameTo(new File(nName));
	    file.delete();
	  }
	public static void main(String[] args){
	    URL url = null;
	    HttpURLConnection urlc = null;
	    DataOutputStream dos = null;
	    BufferedInputStream bis = null;
	    FileOutputStream fos = null;
	    String localFile = "d:\\XunXian_V2.0.21.1_dl.exe";//文件保存的地方及文件名,具体情况可以改
	    String localFile_bak = localFile + ".tp";//未下载完文件加.tp扩展名,以便于区别
	    GetRemoteFile_Client_GoOn gco = new GetRemoteFile_Client_GoOn();
	    long fileSize = 0;
	    long start = System.currentTimeMillis();
	    int len = 0;
	    byte[] bt = new byte[1024];
	    RandomAccessFile raFile=null;
	    long TotalSize=0;//要下载的文件总大小
	    try{
	      url = new URL("http://down.qq.com/xunxian/full/XunXian_V2.0.21.1_dl.exe");      
	      urlc = (HttpURLConnection) url.openConnection();
	      TotalSize=Long.parseLong(urlc.getHeaderField("Content-Length"));
	      System.out.println("下载文件大小为:"+TotalSize);
//	      urlc.disconnect();//先断开,下面再连接,否则下面会报已经连接的错误
	      urlc = (HttpURLConnection) url.openConnection();
	      //确定文件是否存在
	      if (gco.FileExist(localFile_bak)){//采用断点续传,这里的依据是看下载文件是否在本地有.tp有扩展名同名文件
	        System.out.println("文件续传中...");
	        fileSize = gco.FileSize(localFile_bak); //取得文件在小,以便确定随机写入的位置
	        System.out.println("fileSize:"+fileSize);
	        //设置User-Agent
	        //urlc.setRequestProperty("User-Agent","NetFox");
	        //设置断点续传的开始位置
	        urlc.setRequestProperty("RANGE", "bytes="+fileSize+"-");
	        //urlc.setRequestProperty("RANGE", "bytes="+fileSize);//这样写不行,不能少了这个"-".
	        //设置接受信息
	        urlc.setRequestProperty("Accept","image/gif,image/x-xbitmap,application/msword,*/*");        
	        raFile=new RandomAccessFile(localFile_bak,"rw");//随机方位读取
	        raFile.seek(fileSize);//定位指针到fileSize位置
	        bis = new BufferedInputStream(urlc.getInputStream());
	        while ((len = bis.read(bt)) > 0){//循环获取文件
	          raFile.write(bt, 0, len);
	        }
	        System.out.println("文件续传接收完毕!");        
	      }
	      else{//采用原始下载
	        fos = new FileOutputStream(localFile_bak); //没有下载完毕就将文件的扩展名命名.bak
	        dos = new DataOutputStream(fos);
	        bis = new BufferedInputStream(urlc.getInputStream());        
	        System.out.println("正在接收文件...");
	        int test=0;
	        while ((len = bis.read(bt)) > 0){//循环获取文件
	          dos.write(bt, 0, len);
	          test++;
	        }        
	      }      
	      System.out.println("共用时:" + 
	                         (System.currentTimeMillis() - start) / 1000);
	      if(bis!=null)
	        bis.close();
	      if(dos!=null)
	        dos.close();
	      if(fos!=null)
	        fos.close();
	      if(raFile!=null)
	        raFile.close();
	      System.out.println("localFile_bak:"+gco.FileSize(localFile_bak));
	      if(gco.FileSize(localFile_bak)==TotalSize){//下载完毕后,将文件重命名
	        gco.FileRename(localFile_bak,localFile);
	      }
	      System.exit(0);
	    }
	    catch (Exception e){
	      try{
	        if(bis!=null)
	          bis.close();
	        if(dos!=null)
	          dos.close();
	        if(fos!=null)
	          fos.close();
	        if(raFile!=null)
	          raFile.close();
	      }
	      catch (IOException f){
	        f.printStackTrace();
	      }
	      e.printStackTrace();
	    }
	    System.exit(0);
	  }

原文地址: http://blog.csdn.net/fenglibing/archive/2007/01/09/1478040.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值