WEB开发网
开发学院软件开发Java 用java多线程断点续传实践 阅读

用java多线程断点续传实践

 2009-09-24 00:00:00 来源:WEB开发网   
核心提示: 4、最后,说说断点续传,用java多线程断点续传实践(8),前面为了实现断点续传,在每个下载线程中都创建了一个临时文件,判断目标文件是否完整if(localFileSize<contentLength){System.out.println("Nowdownloadcontinu

4、最后,说说断点续传,前面为了实现断点续传,在每个下载线程中都创建了一个临时文件,现在我们就要利用这个临时文件来设置断点的位置。由于临时文件的命名方式都是固定的,所以我们就专门找对应下载的目标文件的临时文件,临时文件中已经下载的字节数就是我们需要的断点位置。startPos是一个数组,存放了每个线程的已下载的字节数。

//第一步,分析已下载的临时文件,设置断点,如果是新的下载任务,则建立目标文件。 

private long[] setThreadBreakpoint(String fileDir2, String fileName2,   
        long contentLength, long[] startPos) {   
    File file = new File(fileDir + fileName);   
    long localFileSize = file.length();   
  
    if (file.exists()) {   
        System.out.println("file " + fileName + " has exists!");   
        // 下载的目标文件已存在,判断目标文件是否完整   
        if (localFileSize < contentLength) {   
            System.out.println("Now download continue  ");   
  
            // 遍历目标文件的所有临时文件,设置断点的位置,即每个临时文件的长度   
            File tempFileDir = new File(fileDir);   
            File[] files = tempFileDir.listFiles();   
            for (int k = 0; k < files.length; k++) {   
                String tempFileName = files[k].getName();   
                // 临时文件的命名方式为:目标文件名+"_"+编号   
                if (tempFileName != null && files[k].length() > 0  
                        && tempFileName.startsWith(fileName + "_")) {   
                    int fileLongNum = Integer.parseInt(tempFileName   
                            .substring(tempFileName.lastIndexOf("_") + 1,   
                                    tempFileName.lastIndexOf("_") + 2));   
                    // 为每个线程设置已下载的位置   
                    startPos[fileLongNum] = files[k].length();   
                }   
            }   
        }   
    } else {   
        // 如果下载的目标文件不存在,则创建新文件   
        try {   
            file.createNewFile();   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
    }   
  
    return startPos;   
} 

5、测试

public class DownloadStartup {   
    private static final String encoding = "utf-8";    
    public static void main(String[] args) {   
        DownloadTask downloadManager = new DownloadTask();         
        String urlStr = "http://apache.freelamp.com/velocity/tools/1.4/velocity-tools-1.4.zip";        
        downloadManager.setSleepSeconds(5);   
        downloadManager.download(urlStr, encoding);   
    }   
} 

上一页  3 4 5 6 7 8 

Tags:java 线程 断点

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接