文件切割总结

我们有时候会需要把两个文件合并成一个大文件,以便于使用,比如两个分割的rar文件,或者单纯要将电子书合并。

使用类:SequenceInputStream:表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类 推,直到到达包含的最后一个输入流的文件末尾为止。
构造方法: SequenceInputStream( Enumeration<? extends InputStream> e) 于是 我们需要一个Enumeration类型。

类:Vector 的方法   Enumeration<E> elements() 返回此向量的组件的枚举,   

bingo!接下去就是搭积木了,我们只需将需要的元素添加到容器中,调用vector容器的elements()方法返回枚举类型,在传入到SequenceInputStream构造方法中,至此完成了文件的捆绑操作,然后就和普通的读写没区别。
传入vector容器的类型会有些让人困惑,因为他既不是基本类型,也不是一般的引用类型,而是一个数据流类型!在印象中,数据流类型是动态的,很少被传入容器,可SequenceInputStream偏偏需要一个InputStream的子类,其实InputStream和其他的引用类型没多大区别,需要就传给咯。
下面是代码:
public class ASD {
	File f1 = new File("D:\\1.txt");  //需要合并的文件1,2,3.txt  
    File f2 = new File("D:\\2.txt");  
    File f3 = new File("D:\\3.txt");  
    SequenceInputStream sis;  
    Vector<FileInputStream> vector;  
    FileOutputStream fos;  
      
    public void hb() throws IOException{  
        vector = new Vector<FileInputStream>();  //创建容器  
        vector.add(new FileInputStream(f1));  //加入容器中  
        vector.add(new FileInputStream(f2));  
        vector.add(new FileInputStream(f3));  
  
        Enumeration<FileInputStream> enu = vector.elements();  //将容器转换为枚举类型  
          
        sis = new SequenceInputStream(enu);   //打开文件 将枚举传入构造函数  
        fos = new FileOutputStream("d:\\4.txt");  //打开文件  
          
        byte[] b = new byte[1024*1024];  //下面很普通的读写操作  
        int i = 0;  
          
        while( (i = sis.read(b))!=-1)  
        {  
            fos.write(b,0,i);  
        }  
        sis.close();  
        fos.close();  
          
    }  
      
    public static void main(String[] args) throws IOException {  
        ASD h =new ASD();  
        h.hb();  
  
    }  
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值