|  | @ -1,217 +1,217 @@
 | 
	
		
			
				|  |  | package com.yihu.jw.care.util;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.io.*;
 | 
	
		
			
				|  |  | import java.net.URL;
 | 
	
		
			
				|  |  | import java.net.URLConnection;
 | 
	
		
			
				|  |  | import java.util.ArrayList;
 | 
	
		
			
				|  |  | import java.util.HashMap;
 | 
	
		
			
				|  |  | import java.util.List;
 | 
	
		
			
				|  |  | import java.util.UUID;
 | 
	
		
			
				|  |  | import java.util.regex.Matcher;
 | 
	
		
			
				|  |  | import java.util.regex.Pattern;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | // https://my.oschina.net/haitaohu/blog/1941179
 | 
	
		
			
				|  |  | public class HlsDownloader {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private String uuid;
 | 
	
		
			
				|  |  |     private String originUrlpath;
 | 
	
		
			
				|  |  |     private String preUrlPath;
 | 
	
		
			
				|  |  |     private String rootPath;
 | 
	
		
			
				|  |  |     private String fileName;
 | 
	
		
			
				|  |  |     private String folderPath;
 | 
	
		
			
				|  |  |     private int threadQuantity = 10;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public int getThreadQuantity() {
 | 
	
		
			
				|  |  |         return threadQuantity;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public void setThreadQuantity(int threadQuantity) {
 | 
	
		
			
				|  |  |         this.threadQuantity = threadQuantity;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HlsDownloader(String originUrlpath, String preUrlPath, String rootPath){
 | 
	
		
			
				|  |  |         this.uuid = UUID.randomUUID().toString().replaceAll("-","");
 | 
	
		
			
				|  |  |         this.originUrlpath = originUrlpath;
 | 
	
		
			
				|  |  |         this.preUrlPath = preUrlPath;
 | 
	
		
			
				|  |  |         this.rootPath = rootPath;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         this.fileName = uuid+ ".mp4";
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         this.folderPath = rootPath + File.separator + uuid;
 | 
	
		
			
				|  |  |         File file = new File(folderPath);
 | 
	
		
			
				|  |  |         if(!file.exists()) file.mkdirs();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public String download(boolean isAsync) throws Exception {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String indexStr = getIndexFile();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         List urlList = analysisIndex(indexStr);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         HashMap<Integer,String> keyFileMap = new HashMap<>();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if(isAsync){
 | 
	
		
			
				|  |  |             downLoadIndexFileAsync(urlList, keyFileMap);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             while (keyFileMap.size()<urlList.size()){
 | 
	
		
			
				|  |  |                 //System.out.println("当前下载数量"+keyFileMap.size());
 | 
	
		
			
				|  |  |                 Thread.sleep(3000);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }else{
 | 
	
		
			
				|  |  |             keyFileMap = downLoadIndexFile(urlList);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return composeFile(keyFileMap);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /* 下载索引文件 */
 | 
	
		
			
				|  |  |     public String getIndexFile() throws Exception{
 | 
	
		
			
				|  |  |         URL url = new URL(originUrlpath);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         /*File file = new File("E:\\JKZL\\1.m3u8");
 | 
	
		
			
				|  |  |         url = file.toURL();*/
 | 
	
		
			
				|  |  |         //下载资源
 | 
	
		
			
				|  |  |         BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String content = "" ;
 | 
	
		
			
				|  |  |         String line;
 | 
	
		
			
				|  |  |         while ((line = in.readLine()) != null) {
 | 
	
		
			
				|  |  |             content += line + "\n";
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         in.close();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return content;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /* 解析索引文件 */
 | 
	
		
			
				|  |  |     public List analysisIndex(String content) throws Exception{
 | 
	
		
			
				|  |  |         Pattern pattern = Pattern.compile(".*ts");
 | 
	
		
			
				|  |  |         Matcher ma = pattern.matcher(content);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         List<String> list = new ArrayList<String>();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         while(ma.find()){
 | 
	
		
			
				|  |  |             list.add(ma.group());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return list;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /* 下载视频片段 */
 | 
	
		
			
				|  |  |     public HashMap downLoadIndexFile(List<String> urlList){
 | 
	
		
			
				|  |  |         HashMap<Integer,String> keyFileMap = new HashMap<>();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         for(int i =0;i<urlList.size();i++){
 | 
	
		
			
				|  |  |             String subUrlPath = urlList.get(i);
 | 
	
		
			
				|  |  |             String fileOutPath = folderPath + File.separator + i + ".ts";
 | 
	
		
			
				|  |  |             keyFileMap.put(i, fileOutPath);
 | 
	
		
			
				|  |  |             try{
 | 
	
		
			
				|  |  |                 downloadNet(preUrlPath + subUrlPath, fileOutPath);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 System.out.println("成功:"+ (i + 1) +"/" + urlList.size());
 | 
	
		
			
				|  |  |             }catch (Exception e){
 | 
	
		
			
				|  |  |                 System.err.println("失败:"+ (i + 1) +"/" + urlList.size());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return  keyFileMap;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public void downLoadIndexFileAsync(List<String> urlList, HashMap<Integer,String> keyFileMap) throws Exception{
 | 
	
		
			
				|  |  |         int downloadForEveryThread = (urlList.size() + threadQuantity - 1)/threadQuantity;
 | 
	
		
			
				|  |  |         if(downloadForEveryThread == 0) downloadForEveryThread = urlList.size();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         for(int i=0; i<urlList.size();i+=downloadForEveryThread){
 | 
	
		
			
				|  |  |             int startIndex = i;
 | 
	
		
			
				|  |  |             int endIndex = i + downloadForEveryThread - 1;
 | 
	
		
			
				|  |  |             if(endIndex >= urlList.size())
 | 
	
		
			
				|  |  |                 endIndex = urlList.size() - 1;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             new DownloadThread(urlList, startIndex, endIndex, keyFileMap).start();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 视频片段合成
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public String composeFile(HashMap<Integer,String> keyFileMap) throws Exception{
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if(keyFileMap.isEmpty()) return null;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String fileOutPath = rootPath + File.separator + fileName;
 | 
	
		
			
				|  |  |         FileOutputStream fileOutputStream = new FileOutputStream(new File(fileOutPath));
 | 
	
		
			
				|  |  |         byte[] bytes = new byte[1024];
 | 
	
		
			
				|  |  |         int length = 0;
 | 
	
		
			
				|  |  |         for(int i=0; i<keyFileMap.size(); i++){
 | 
	
		
			
				|  |  |             String nodePath = keyFileMap.get(i);
 | 
	
		
			
				|  |  |             File file = new File(nodePath);
 | 
	
		
			
				|  |  |             if(!file.exists())  continue;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             FileInputStream fis = new FileInputStream(file);
 | 
	
		
			
				|  |  |             while ((length = fis.read(bytes)) != -1) {
 | 
	
		
			
				|  |  |                 fileOutputStream.write(bytes, 0, length);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return fileName;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     class DownloadThread extends Thread{
 | 
	
		
			
				|  |  |         private List<String> urlList;
 | 
	
		
			
				|  |  |         private int startIndex;
 | 
	
		
			
				|  |  |         private int endIndex;
 | 
	
		
			
				|  |  |         private HashMap<Integer,String> keyFileMap;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         public DownloadThread(List<String> urlList, int startIndex, int endIndex, HashMap<Integer,String> keyFileMap){
 | 
	
		
			
				|  |  |             this.urlList = urlList;
 | 
	
		
			
				|  |  |             this.startIndex = startIndex;
 | 
	
		
			
				|  |  |             this.endIndex = endIndex;
 | 
	
		
			
				|  |  |             this.keyFileMap = keyFileMap;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         @Override
 | 
	
		
			
				|  |  |         public void run(){
 | 
	
		
			
				|  |  |             for(int i=startIndex;i<=endIndex;i++){
 | 
	
		
			
				|  |  |                 String subUrlPath = urlList.get(i);
 | 
	
		
			
				|  |  |                 String fileOutPath = folderPath + File.separator + i + ".ts";
 | 
	
		
			
				|  |  |                 keyFileMap.put(i, fileOutPath);
 | 
	
		
			
				|  |  |                 String message = "%s: 线程 " + (startIndex/(endIndex - startIndex) + 1)
 | 
	
		
			
				|  |  |                         + ", "+ (i + 1) +"/" + urlList.size() +", 合计: %d";
 | 
	
		
			
				|  |  |                 try{
 | 
	
		
			
				|  |  |                     downloadNet(preUrlPath + subUrlPath, fileOutPath);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     System.out.println(String.format(message, "成功", keyFileMap.size()));
 | 
	
		
			
				|  |  |                 }catch (Exception e){
 | 
	
		
			
				|  |  |                     System.err.println(String.format(message, "失败", keyFileMap.size()));
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private void downloadNet(String fullUrlPath, String fileOutPath) throws Exception {
 | 
	
		
			
				|  |  |         // 下载网络文件
 | 
	
		
			
				|  |  | //        DataInputStream dataInputStream = new DataInputStream(url.openStream());
 | 
	
		
			
				|  |  | //package com.yihu.jw.care.util;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //import java.io.*;
 | 
	
		
			
				|  |  | //import java.net.URL;
 | 
	
		
			
				|  |  | //import java.net.URLConnection;
 | 
	
		
			
				|  |  | //import java.util.ArrayList;
 | 
	
		
			
				|  |  | //import java.util.HashMap;
 | 
	
		
			
				|  |  | //import java.util.List;
 | 
	
		
			
				|  |  | //import java.util.UUID;
 | 
	
		
			
				|  |  | //import java.util.regex.Matcher;
 | 
	
		
			
				|  |  | //import java.util.regex.Pattern;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //// https://my.oschina.net/haitaohu/blog/1941179
 | 
	
		
			
				|  |  | //public class HlsDownloader {
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    private String uuid;
 | 
	
		
			
				|  |  | //    private String originUrlpath;
 | 
	
		
			
				|  |  | //    private String preUrlPath;
 | 
	
		
			
				|  |  | //    private String rootPath;
 | 
	
		
			
				|  |  | //    private String fileName;
 | 
	
		
			
				|  |  | //    private String folderPath;
 | 
	
		
			
				|  |  | //    private int threadQuantity = 10;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    public int getThreadQuantity() {
 | 
	
		
			
				|  |  | //        return threadQuantity;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    public void setThreadQuantity(int threadQuantity) {
 | 
	
		
			
				|  |  | //        this.threadQuantity = threadQuantity;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    public HlsDownloader(String originUrlpath, String preUrlPath, String rootPath){
 | 
	
		
			
				|  |  | //        this.uuid = UUID.randomUUID().toString().replaceAll("-","");
 | 
	
		
			
				|  |  | //        this.originUrlpath = originUrlpath;
 | 
	
		
			
				|  |  | //        this.preUrlPath = preUrlPath;
 | 
	
		
			
				|  |  | //        this.rootPath = rootPath;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        this.fileName = uuid+ ".mp4";
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        this.folderPath = rootPath + File.separator + uuid;
 | 
	
		
			
				|  |  | //        File file = new File(folderPath);
 | 
	
		
			
				|  |  | //        if(!file.exists()) file.mkdirs();
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    public String download(boolean isAsync) throws Exception {
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        String indexStr = getIndexFile();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        List urlList = analysisIndex(indexStr);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        HashMap<Integer,String> keyFileMap = new HashMap<>();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        if(isAsync){
 | 
	
		
			
				|  |  | //            downLoadIndexFileAsync(urlList, keyFileMap);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            while (keyFileMap.size()<urlList.size()){
 | 
	
		
			
				|  |  | //                //System.out.println("当前下载数量"+keyFileMap.size());
 | 
	
		
			
				|  |  | //                Thread.sleep(3000);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //        }else{
 | 
	
		
			
				|  |  | //            keyFileMap = downLoadIndexFile(urlList);
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        return composeFile(keyFileMap);
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /* 下载索引文件 */
 | 
	
		
			
				|  |  | //    public String getIndexFile() throws Exception{
 | 
	
		
			
				|  |  | //        URL url = new URL(originUrlpath);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        /*File file = new File("E:\\JKZL\\1.m3u8");
 | 
	
		
			
				|  |  | //        url = file.toURL();*/
 | 
	
		
			
				|  |  | //        //下载资源
 | 
	
		
			
				|  |  | //        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        String content = "" ;
 | 
	
		
			
				|  |  | //        String line;
 | 
	
		
			
				|  |  | //        while ((line = in.readLine()) != null) {
 | 
	
		
			
				|  |  | //            content += line + "\n";
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //        in.close();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        return content;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /* 解析索引文件 */
 | 
	
		
			
				|  |  | //    public List analysisIndex(String content) throws Exception{
 | 
	
		
			
				|  |  | //        Pattern pattern = Pattern.compile(".*ts");
 | 
	
		
			
				|  |  | //        Matcher ma = pattern.matcher(content);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        List<String> list = new ArrayList<String>();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        while(ma.find()){
 | 
	
		
			
				|  |  | //            list.add(ma.group());
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        return list;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /* 下载视频片段 */
 | 
	
		
			
				|  |  | //    public HashMap downLoadIndexFile(List<String> urlList){
 | 
	
		
			
				|  |  | //        HashMap<Integer,String> keyFileMap = new HashMap<>();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        for(int i =0;i<urlList.size();i++){
 | 
	
		
			
				|  |  | //            String subUrlPath = urlList.get(i);
 | 
	
		
			
				|  |  | //            String fileOutPath = folderPath + File.separator + i + ".ts";
 | 
	
		
			
				|  |  | //            keyFileMap.put(i, fileOutPath);
 | 
	
		
			
				|  |  | //            try{
 | 
	
		
			
				|  |  | //                downloadNet(preUrlPath + subUrlPath, fileOutPath);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //                System.out.println("成功:"+ (i + 1) +"/" + urlList.size());
 | 
	
		
			
				|  |  | //            }catch (Exception e){
 | 
	
		
			
				|  |  | //                System.err.println("失败:"+ (i + 1) +"/" + urlList.size());
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        return  keyFileMap;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    public void downLoadIndexFileAsync(List<String> urlList, HashMap<Integer,String> keyFileMap) throws Exception{
 | 
	
		
			
				|  |  | //        int downloadForEveryThread = (urlList.size() + threadQuantity - 1)/threadQuantity;
 | 
	
		
			
				|  |  | //        if(downloadForEveryThread == 0) downloadForEveryThread = urlList.size();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        for(int i=0; i<urlList.size();i+=downloadForEveryThread){
 | 
	
		
			
				|  |  | //            int startIndex = i;
 | 
	
		
			
				|  |  | //            int endIndex = i + downloadForEveryThread - 1;
 | 
	
		
			
				|  |  | //            if(endIndex >= urlList.size())
 | 
	
		
			
				|  |  | //                endIndex = urlList.size() - 1;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            new DownloadThread(urlList, startIndex, endIndex, keyFileMap).start();
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //    /**
 | 
	
		
			
				|  |  | //     * 视频片段合成
 | 
	
		
			
				|  |  | //     */
 | 
	
		
			
				|  |  | //    public String composeFile(HashMap<Integer,String> keyFileMap) throws Exception{
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        if(keyFileMap.isEmpty()) return null;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        String fileOutPath = rootPath + File.separator + fileName;
 | 
	
		
			
				|  |  | //        FileOutputStream fileOutputStream = new FileOutputStream(new File(fileOutPath));
 | 
	
		
			
				|  |  | //        byte[] bytes = new byte[1024];
 | 
	
		
			
				|  |  | //        int length = 0;
 | 
	
		
			
				|  |  | //        while ((length = dataInputStream.read(bytes)) != -1) {
 | 
	
		
			
				|  |  | //            fileOutputStream.write(bytes, 0, length);
 | 
	
		
			
				|  |  | //        for(int i=0; i<keyFileMap.size(); i++){
 | 
	
		
			
				|  |  | //            String nodePath = keyFileMap.get(i);
 | 
	
		
			
				|  |  | //            File file = new File(nodePath);
 | 
	
		
			
				|  |  | //            if(!file.exists())  continue;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            FileInputStream fis = new FileInputStream(file);
 | 
	
		
			
				|  |  | //            while ((length = fis.read(bytes)) != -1) {
 | 
	
		
			
				|  |  | //                fileOutputStream.write(bytes, 0, length);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        return fileName;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | ////    class DownloadThread extends Thread{
 | 
	
		
			
				|  |  | ////        private List<String> urlList;
 | 
	
		
			
				|  |  | ////        private int startIndex;
 | 
	
		
			
				|  |  | ////        private int endIndex;
 | 
	
		
			
				|  |  | ////        private HashMap<Integer,String> keyFileMap;
 | 
	
		
			
				|  |  | ////
 | 
	
		
			
				|  |  | ////        public DownloadThread(List<String> urlList, int startIndex, int endIndex, HashMap<Integer,String> keyFileMap){
 | 
	
		
			
				|  |  | ////            this.urlList = urlList;
 | 
	
		
			
				|  |  | ////            this.startIndex = startIndex;
 | 
	
		
			
				|  |  | ////            this.endIndex = endIndex;
 | 
	
		
			
				|  |  | ////            this.keyFileMap = keyFileMap;
 | 
	
		
			
				|  |  | ////        }
 | 
	
		
			
				|  |  | ////        @Override
 | 
	
		
			
				|  |  | ////        public void run(){
 | 
	
		
			
				|  |  | ////            for(int i=startIndex;i<=endIndex;i++){
 | 
	
		
			
				|  |  | ////                String subUrlPath = urlList.get(i);
 | 
	
		
			
				|  |  | ////                String fileOutPath = folderPath + File.separator + i + ".ts";
 | 
	
		
			
				|  |  | ////                keyFileMap.put(i, fileOutPath);
 | 
	
		
			
				|  |  | ////                String message = "%s: 线程 " + (startIndex/(endIndex - startIndex) + 1)
 | 
	
		
			
				|  |  | ////                        + ", "+ (i + 1) +"/" + urlList.size() +", 合计: %d";
 | 
	
		
			
				|  |  | ////                try{
 | 
	
		
			
				|  |  | ////                    downloadNet(preUrlPath + subUrlPath, fileOutPath);
 | 
	
		
			
				|  |  | ////
 | 
	
		
			
				|  |  | ////                    System.out.println(String.format(message, "成功", keyFileMap.size()));
 | 
	
		
			
				|  |  | ////                }catch (Exception e){
 | 
	
		
			
				|  |  | ////                    System.err.println(String.format(message, "失败", keyFileMap.size()));
 | 
	
		
			
				|  |  | ////                }
 | 
	
		
			
				|  |  | ////            }
 | 
	
		
			
				|  |  | ////        }
 | 
	
		
			
				|  |  | ////    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    private void downloadNet(String fullUrlPath, String fileOutPath) throws Exception {
 | 
	
		
			
				|  |  | //        // 下载网络文件
 | 
	
		
			
				|  |  | ////        DataInputStream dataInputStream = new DataInputStream(url.openStream());
 | 
	
		
			
				|  |  | ////        FileOutputStream fileOutputStream = new FileOutputStream(new File(fileOutPath));
 | 
	
		
			
				|  |  | ////        byte[] bytes = new byte[1024];
 | 
	
		
			
				|  |  | ////        int length = 0;
 | 
	
		
			
				|  |  | ////        while ((length = dataInputStream.read(bytes)) != -1) {
 | 
	
		
			
				|  |  | ////            fileOutputStream.write(bytes, 0, length);
 | 
	
		
			
				|  |  | ////        }
 | 
	
		
			
				|  |  | ////        dataInputStream.close();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        //int bytesum = 0;
 | 
	
		
			
				|  |  | //        int byteread = 0;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        URL url = new URL(fullUrlPath);
 | 
	
		
			
				|  |  | //        URLConnection conn = url.openConnection();
 | 
	
		
			
				|  |  | //        InputStream inStream = conn.getInputStream();
 | 
	
		
			
				|  |  | //        FileOutputStream fs = new FileOutputStream(fileOutPath);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        byte[] buffer = new byte[1204];
 | 
	
		
			
				|  |  | //        while ((byteread = inStream.read(buffer)) != -1) {
 | 
	
		
			
				|  |  | //            //bytesum += byteread;
 | 
	
		
			
				|  |  | //            fs.write(buffer, 0, byteread);
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //        dataInputStream.close();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //int bytesum = 0;
 | 
	
		
			
				|  |  |         int byteread = 0;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         URL url = new URL(fullUrlPath);
 | 
	
		
			
				|  |  |         URLConnection conn = url.openConnection();
 | 
	
		
			
				|  |  |         InputStream inStream = conn.getInputStream();
 | 
	
		
			
				|  |  |         FileOutputStream fs = new FileOutputStream(fileOutPath);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         byte[] buffer = new byte[1204];
 | 
	
		
			
				|  |  |         while ((byteread = inStream.read(buffer)) != -1) {
 | 
	
		
			
				|  |  |             //bytesum += byteread;
 | 
	
		
			
				|  |  |             fs.write(buffer, 0, byteread);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //}
 |