java——文件合并

文件合并的原理和使用SequenceInputStream,实现文件碎片的合并

package com.zhaoqian.transstream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

public class Demo7 {

    public static void main(String[] args) throws Exception {
        //文件合并
//      File file = new File("F:"+File.separator+"PartFiles"+File.separator+"my.properties");
//      FileInputStream fsinfo = new FileInputStream(file);
        
        
//      MergerFile_1();
        MergerFile_2();
    }

    public static void MergerFile_2() throws Exception {
        File path = new File("F:"+File.separator+"PartFiles");
        
        // 创建集合
        List<FileInputStream> list = new ArrayList<FileInputStream>();
        
        for (int i = 1; i < 7; i++) {
            // 保存所有的输入流
            list.add(new FileInputStream(new File(path,i+".part")));
        }
        
        // 通过流工具类,获取一个枚举对象
        Enumeration<FileInputStream> en = Collections.enumeration(list);
        
        // 源
        SequenceInputStream sis = new SequenceInputStream(en);
        
        // 写入目的文件
        FileOutputStream fos = new FileOutputStream(new File(path,"1.mp3"));
        
        byte[] by = new byte[1024];
        int len = 0;
        while((len = sis.read(by))!=-1){
            fos.write(by, 0, len);
        }
        
        fos.close();
        sis.close();
        
    }

    public static void MergerFile_1() throws Exception {
        List<FileInputStream> list = new ArrayList<FileInputStream>();
        
        // 获取读取流对象
        for (int i = 1; i < 7; i++) {
            list.add(new FileInputStream("F:"+File.separator+"PartFiles"+File.separator+i+".part"));
        }
        
        FileOutputStream fos = new FileOutputStream(new File("F:"+File.separator+"PartFiles"+File.separator+"0.mp3"));
        
        byte[] buf = new byte[1024*1024];
        
        // 遍历集合,获取流对象
        for (FileInputStream fis : list) {
            int len = 0;
            while((len = fis.read(buf)) != -1){
                fos.write(buf, 0, len);
            }
            fis.close();
        }
        
        fos.close();
        
    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,901评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,800评论 19 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,475评论 11 349
  • 今天是长假的第五天,在家里跟先生几乎是全然的放松,饿了就吃,困了就睡,想看书就看书,想写作就写作,做了月饼,包...
    yoga唯阅读 1,436评论 2 4
  • 他和她从认识那天起,他们的日子就和月亮扯上了千丝万缕的联系。尤其是那一个个的...
    剪刀手不说耶阅读 2,885评论 1 1