File-zip文件拆分合并

本文详细介绍了如何使用Java进行大文件的拆分和合并操作,包括具体步骤和关键代码示例,适用于处理大量数据文件,提升系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class FileDeal {
     /*
      * 文件分割(拆分大的zip文件为小的zip文件)
      */
    public static synchronized int splitZip(String fileSrc, String destSrc){
        File file=new File(fileSrc);
        if(file.exists()){
            System.out.println("文件不存在!");
            return 0;
        }
        //需要拆分文件大小
        long countFileSize=file.length();
        //拆分后一个文件大小
        long oneFileSize=1024*1024*200;
        //统计zip文件被分割的个数
        int partNum=0;
        if(countFileSize%oneFileSize==0){
            partNum=(int)(countFileSize/oneFileSize);
        }else{
            partNum=(int)(countFileSize/oneFileSize)+1;
        }
        System.out.println("分割文件个数:"+partNum);

        InputStream in;
        try{
            in=new FileInputStream(file);
            BufferedInputStream bis=new BufferedInputStream(in);
            BufferedOutputStream bos=null;

            byte bytes[]=new byte[1024*1024*20];

            for(int i=0;i<partNum;i++){
                String newFileSrc=destSrc+"part-"+i+".zip";
                File newFile=new File(newFileSrc);
                if(!newFile.getParentFile().exists()){
                    System.out.println("创建文件分割目录!");
                    newFile.getParentFile().mkdirs();
                }

                bos=new BufferedOutputStream(new FileOutputStream(new File));
                int readSize=-1;
                int count=0;
                while((readSize=bis.read(bytes))!=-1){
                    bos.write(bytes, 0, readSize);
                    bos.flush();
                    count+=readSize;
                    if(count>=oneFileSize){
                        break;
                    }
                }
            }
            bis.close();
            in.close();
            bos.close();
        }catch(Exception e){
            e.printStackTrace(); 
        }
        return partNum;
    } 
    
    
    /*
     * 合并文件
     */
    public static void  mergeFile(File...files){
        File file=new File("D:\\mergefile\\");
        if(!file.getParentFile().exists()){
            System.out.println("创建目录:");
            file.getParentFile().mkdirs();
        }
        try {
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("D:\\mergefile\\merge123.zip")));
            BufferedInputStream bis=null;
            byte bytes[]=new byte[1024*1024*10];
            int readSize=0;
            for(int i=0;i<files.length;i++){
                bis=new BufferedInputStream(new FileInputStream(files[i]));
                while((readSize=bis.read(bytes))!=-1){
                    bos.write(bytes,0,readSize);
                }
            }
            bos.close();
            bis.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    /*
     *将文件字节大小转换为KB、M、G等
     */
    public static String readableFileSize(long size){
        if(size<=0){
            return "0";
        }
        final String[] units=new String[]{"B","KB","MB","GB","TB"};
        int digitGroups=(int)(Math.log10(size)/Math.log10(1024));
        return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups))+""+units[digitGroups];
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值