切割大文件与合并文件

题目:将一个大文件切割成指定大小的小文件。最后再将其合并

  切割文件思路:1.明确要切割成后每个文件的大小

     2.当写入指定大小的内容后,新建一个流接着写入文件。

  

public static void cutFile() throws IOException
    {
        File f = new File("D:\\Java\\工具包\\Eclipse安装包\\eclipse-jee-luna-R-win32.zip");
        
        //分割后每个每个文件的大小为100M
        long oneSize = 100*1024*1024;
        
        //读取文件
        FileInputStream bis = new FileInputStream(f);
        
        byte[] buff = new byte[1024*1024];
        int len = 0;
        
        int i=1;
        
        FileOutputStream fos = new FileOutputStream("D:\\eclipse.rar.part"+i);  //第一个流
        
        long max = oneSize;
        while((len = bis.read(buff))!=-1)
        {
            fos.write(buff,0,len);
            max -= len;  
            
            if(max<=0)  //判断文件大小是否达到100M(指定大小)
            {
                fos = new FileOutputStream("D:\\eclipse.rar.part"+(++i));
                max = oneSize;(因为流已经是新的了,文件大小应该重置为100M)
            }
        }
        System.out.println("切割完毕...");
        
        bis.close();
        fos.close();
    }

合并文件使用 SequenceInputStream 就OK了,但是不要用 Vector,效率太低了,可以使用ArrayList

public static void heBin() throws IOException
    {
        ArrayList<FileInputStream> arr = new ArrayList<FileInputStream>();
        
        for(int i=1;i<4;i++)
        {
            arr.add(new FileInputStream("D:\\eclipse.rar.part"+i));
        }
        
        Iterator<FileInputStream> it = arr.iterator();
        
        Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
        {
            public boolean hasMoreElements()
            {
                return it.hasNext();
            }
            
            public FileInputStream nextElement()
            {
                return it.next();
            }
        };
        
        SequenceInputStream sis = new SequenceInputStream(en);
        byte[] buff = new byte[1024*1024];
        
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\eclipseAll.rar"));
        
        int len = 0;
        
        while((len=sis.read(buff))!=-1)
        {
            bos.write(buff,0,len);
            bos.flush();
        }
        
        System.out.println("合并完成...");
        
        sis.close();
        bos.close();
        
    }

 

转载于:https://www.cnblogs.com/alwaysJP/p/8094067.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基本安装 1、对于单个控件,Componet-->install component..-->PAS或DCU文件-->install; 2、对于带*.dpk文件的控件包,File-->Open(下拉列表框中选*.dpk)-->install即可; 3、对于带*.bpl文件的控件包,Install Packages-->Add-->bpl文件名即可; 4、如果以上Install按钮为失效的话,试试Compile按钮; 5、是run time lib则在option下的packages下的runtimepackes加之。 如果编译时提示文件找不到的话,一般是控件的安装目录不在Delphi的Lib目录中,有两种方法可以解决: 1、反安装的源文件拷入到Delphi的Lib目录下; 2、或者Tools-->Environment Options中把控件源代码路径加入到Delphi的Lib目录中即可。 注意:所安装的控件是否与你所用的Delphi版本相适应。 RxLib的安装   首先在Delphi 5 的 IDE 中将以前版本的 Rxlib 反安装掉,删除 RXCTL5.BPL、RXDB5.BPL、 RXBDE5.BPL、DCLRX5.BPL、 DCLRXDB5.BPL 和DCLRXBD5.BPL。   打开 Rx 的运行包 RXCTL5.DPK,在 Package 窗口中按 Compile 按钮编译 RXCTL5.DPK ,然后用同样方法编译另两个运行包RXDB5.DPK 和 RXBDE5.DPK ,将编译后的三个 BPL 文件放到搜索路径中,如 WINDOWS\SYSTEM等。   在编译完运行包后你必须将 RX 的设计期包安装到 IDE 环境中。   打开 Rx 的设计期包 DCLRX5.DPK,在 Package 窗口中按 Compile 按钮编译,然后按 Install按钮将设计期包注册到组件面板中。用同样的方法安装 DCLRXDB5.DPK 和 DCLRXBD5.DPK。   注意:不要在 Delphi IDE 中保存包资源(package sources)! 控件删除 在Component/Install Packages中删除。 选Component/configure Palette… 有pages和components两个区域 双击components区域,选中要删除得控件,下面有得Delete按钮 但系统提供的控件只能Hide,不能delete。 打开控件所在的包文件(*.dpk),从中删除控件那个文件,再重新编译该包即可 如果是整个控件包都要删除的话,project->Option->Packages,删掉那个packages,That would be ok~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值