使用http协议下载文件

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

public class HttpDownloadFile {
 public static void main(String[] args) {
  String sURL = "http://u1-1.uutxt.com:9009/33/33311/33311_TXT_1257909348.rar";
  int nStartPos = 0;
  int nRead = 0;
  String sName = "liumanggaoshou.rar";
  String sPath = "d:\\temp";
  try {
   URL url = new URL(sURL);
   // 打开连接
   HttpURLConnection httpConnection = (HttpURLConnection) url
     .openConnection();
   // 获得文件长度
   long nEndPos = getFileSize(sURL);
   RandomAccessFile oSavedFile = new RandomAccessFile(sPath + "\\"
     + sName, "rw");
   httpConnection
     .setRequestProperty("User-Agent", "Internet Explorer");
   String sProperty = "bytes=" + nStartPos + "-";
   // 告诉服务器book.rar这个文件从nStartPos字节开始传
   httpConnection.setRequestProperty("RANGE", sProperty);
   System.out.println(sProperty);
   InputStream input = httpConnection.getInputStream();
   byte[] b = new byte[1024];
   // 读取网络文件,写入指定的文件中
   while ((nRead = input.read(b, 0, 1024)) > 0 && nStartPos < nEndPos) {
    oSavedFile.write(b, 0, nRead);
    nStartPos += nRead;
   }
   httpConnection.disconnect();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 // 获得文件长度
 public static long getFileSize(String sURL) {
  int nFileLength = -1;
  try {
   URL url = new URL(sURL);
   HttpURLConnection httpConnection = (HttpURLConnection) url
     .openConnection();
   httpConnection
     .setRequestProperty("User-Agent", "Internet Explorer");

   int responseCode = httpConnection.getResponseCode();
   if (responseCode >= 400) {
    System.err.println("Error Code : " + responseCode);
    return -2; // -2 represent access is error
   }
   String sHeader;
   for (int i = 1;; i++) {
    sHeader = httpConnection.getHeaderFieldKey(i);
    if (sHeader != null) {
     if (sHeader.equals("Content-Length")) {
      nFileLength = Integer.parseInt(httpConnection
        .getHeaderField(sHeader));
      break;
     }
    } else
     break;
   }
  } catch (IOException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }
  System.out.println(nFileLength);
  return nFileLength;
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值