利用断点流实现继续下载(实际就是利用断点流seek()方法)

xiaoxiao2021-02-28  114

import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class ContinueCopy { public void copy(File file,File dir){ RandomAccessFile raf_read = null; RandomAccessFile raf_write = null; int count = 0; long position = 0;//记录当前读写的位置 try { position = readPosition(dir); //以只读模式开启一个文件访问流 raf_read = new RandomAccessFile(file,"r"); File target = new File(dir,file.getName()); //以读写模式开启一个文件访问流 raf_write = new RandomAccessFile(target,"rw"); //读写指针跳到指定位置 raf_read.seek(position); raf_write.seek(position); byte[] b = new byte[1024]; int len = 0; System.out.println("准备开始拷贝...."); while((len = raf_read.read(b)) != -1){ count++; position += len;//文件指针未知改变 System.out.println("---》"+count); // if(count==8800){ // System.out.println("出现异常,拷贝终止-->"+position); // throw new Exception(); // } raf_write.write(b, 0, len); } new File(dir,"len.txt").delete(); }catch (Exception e) { //记录当前未知 writePosition(position, dir); e.printStackTrace(); }finally{ try { if(raf_write != null)raf_write.close(); if(raf_read != null)raf_read.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 实时记录文件拷贝(下载)到的目标位置 * @param position * @param dir */ public void writePosition(long position,File dir){ RandomAccessFile raf = null; try { raf = new RandomAccessFile(new File(dir,"len.txt"),"rw"); raf.writeLong(position); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(raf != null)raf.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 读取记录长度的文件中文件指针的位置 * @param dir * @return */ public long readPosition(File dir){ RandomAccessFile raf = null; try { raf = new RandomAccessFile(new File(dir,"len.txt"), "r"); //raf.seek(0); return raf.readLong(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(raf != null)raf.close(); } catch (IOException e) { e.printStackTrace(); } } return 0L; } public static void main(String[] args) { File source = new File("D:\\素材\\视频\\larva搞笑虫子\\1.mp4"); File dir = new File("C:\\Users\\mrchai\\Desktop\\test"); new ContinueCopy().copy(source, dir); } }
转载请注明原文地址: https://www.6miu.com/read-68325.html

最新回复(0)