Java实现文件的拆分合并

一、文件拆分的思路:

 

        定义好每块文件的大小,先根据文件大小,计算出块数,然后把每一块读入缓冲区,从缓冲区写到定好的目录中

public static void main(String[] args) throws IOException {
		//源文件地址
		File sourceFile = new File("E:\\chunck\\share.mp4");
		//块文件目录
		String chunkFileFolder = "E:\\chunck\\chunks";
		//块文件大小
		int chunkFileSize = 1 * 1024 * 1024;
		//块文件数量
		int chunkFileNum = (int) Math.ceil(sourceFile.length() * 1.0 / chunkFileSize);
		//
		RandomAccessFile readFile = new RandomAccessFile(sourceFile, "r");
		byte[] bytes = new byte[1024];
		for(int i = 0; i < chunkFileNum; i++) {
			File chunkFile = new File(chunkFileFolder  + "\\" + i);
			int len = -1;
			//创建块文件
			RandomAccessFile writeFile = new RandomAccessFile(chunkFile, "rw");
			while((len = readFile.read(bytes)) != -1) {
				writeFile.write(bytes, 0 ,len);
				//如果块文件大小达到1M,就读下一块
				if(chunkFile.length() >= chunkFileSize) {
					break;
				}
			}
			writeFile.close();
		}
		readFile.close();
	}

二、文件合并的思路

        把拆分后的文件,先按照名称排序,防止合并的时候顺序错乱,导致文件损坏。

public static void main(String[] args) throws IOException {
        //块文件目录
        String chunkFileFolderPath = "E:\\chunck\\chunks";
        //获取块文件对象
        File chunkFileFolder = new File(chunkFileFolderPath);
        //块文件列表
        File[] files = chunkFileFolder.listFiles();
        //将文件排序
        List<File> filesList = Arrays.asList(files);
        Collections.sort(filesList, (o1, o2) -> {
            if(Integer.parseInt(o1.getName()) > Integer.parseInt(o2.getName())){
                return 1;
            }
            return -1;
        });
        //合并后的文件
        File mergerFile = new File("E:\\chunck\\share_merger.mp4");
        //创建新文件
        boolean newFile = mergerFile.createNewFile();
        //创建写对象
        RandomAccessFile writeFile = new RandomAccessFile(mergerFile, "rw");

        byte[] b = new byte[1024];
        for(File chunkFile : filesList){
            int len = -1;
            //创建读块文件的对象
            RandomAccessFile readFile = new RandomAccessFile(chunkFile, "r");
            while((len = readFile.read(b)) != -1){
                writeFile.write(b, 0, len);
            }
            readFile.close();
        }
        writeFile.close();
    }

        在文件上传下载的时候,会遇到断点续传的问题,可以根据文件的拆分和合并的思路实现断点续传的功能

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值