Пример #1
0
 public SiteFileFetch(SiteInfoBean bean) throws IOException {
   siteInfoBean = bean;
   // tmpFile = File.createTempFile ("zhong","1111",new
   // File(bean.getSFilePath()));
   tmpFile = new File(bean.getSFilePath() + File.separator + bean.getSFileName() + ".info");
   if (tmpFile.exists()) {
     bFirst = false;
     read_nPos();
   } else {
     nStartPos = new long[bean.getNSplitter()]; //
     nEndPos = new long[bean.getNSplitter()];
   }
 }
Пример #2
0
 // 获得文件长度
 public long getFileSize() {
   int nFileLength = -1;
   try {
     URL url = new URL(siteInfoBean.getSSiteURL());
     HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
     httpConnection.setRequestProperty("User-Agent", "NetFox");
     int responseCode = httpConnection.getResponseCode();
     if (responseCode >= 400) {
       processErrorCode(responseCode);
       return -2; // -2 represent access is error
     }
     String sHeader;
     for (int i = 1; ; i++) {
       // DataInputStream in = new
       // DataInputStream(httpConnection.getInputStream ());
       // Utility.log(in.readLine());
       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();
   }
   Utility.log(nFileLength);
   return nFileLength;
 }
Пример #3
0
 public void run() {
   // 获得文件长度
   // 分割文件
   // 实例FileSplitterFetch
   // 启动FileSplitterFetch线程
   // 等待子线程返回
   try {
     if (bFirst) {
       nFileLength = getFileSize();
       if (nFileLength == -1) {
         System.err.println("File Length is not known!");
       } else if (nFileLength == -2) {
         System.err.println("File is not access!");
       } else {
         for (int i = 0; i < nStartPos.length; i++) { // 分割
           nStartPos[i] = (long) (i * (nFileLength / nStartPos.length));
         }
         for (int i = 0; i < nEndPos.length - 1; i++) { // 分割
           nEndPos[i] = nStartPos[i + 1];
         }
         nEndPos[nEndPos.length - 1] = nFileLength;
       }
     }
     // 启动子线程
     fileSplitterFetch = new FileSplitterFetch[nStartPos.length];
     for (int i = 0; i < nStartPos.length; i++) {
       fileSplitterFetch[i] =
           new FileSplitterFetch(
               siteInfoBean.getSSiteURL(),
               siteInfoBean.getSFilePath() + File.separator + siteInfoBean.getSFileName(),
               nStartPos[i],
               nEndPos[i],
               i);
       Utility.log("Thread " + i + " , nStartPos = " + nStartPos[i] + ", nEndPos = " + nEndPos[i]);
       fileSplitterFetch[i].start();
     }
     /*
      * fileSplitterFetch[nPos.length-1] = new
      * FileSplitterFetch(siteInfoBean.getSSiteURL(),
      * siteInfoBean.getSFilePath()+ File.separator +
      * siteInfoBean.getSFileName(),nPos[nPos.length-1],nFileLength,nPos.length-1);
      * Utility.log("Thread " + (nPos.length-1) + " , nStartPos = " +
      * nPos[nPos.length-1] + ", nEndPos = " + nFileLength);
      * fileSplitterFetch[nPos.length-1].start(); 等待子线程结束 int count = 0;
      * 是否结束while循环
      */
     boolean breakWhile = false;
     while (!bStop) {
       write_nPos();
       Utility.sleep(500);
       breakWhile = true;
       for (int i = 0; i < nStartPos.length; i++) {
         if (!fileSplitterFetch[i].bDownOver) {
           breakWhile = false;
           break;
         }
       }
       if (breakWhile) break;
       // count++;
       // if(count>4)
       // siteStop();
     }
     System.err.println("文件下载结束!");
   } catch (Exception e) {
     e.printStackTrace();
   }
 }