Example #1
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();
   }
 }