zoukankan      html  css  js  c++  java
  • java文件分割和合并

    package search;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    
    public class Split {
        
        /**每个小文件大小*/
        static final int SIZE = 1024*1024*5;
        /**需要分割的文件*/
        static final String SOURCE = "E:/t_question.sql";
        /**分割后输出的目录*/
        static final String SOURCE_OUT = "E:/test/";
        /**合并后的文件*/
        static final String DST = "G:/quesion.sql";
    
        public static void main(String[] args) throws IOException{
            split();
        }
        /**
         * 文件分割
         * @throws IOException
         */
        public static void split() throws IOException{
    
            File file = new File(SOURCE);
            FileInputStream raf = new FileInputStream(file);
            FileChannel fc = raf.getChannel();
            long fileSize = fc.size();
            
            int count = (int) (fileSize/SIZE);
            ByteBuffer dst = ByteBuffer.allocate(SIZE);
            for(int i=0 ; i <=count  ; i++){
                FileOutputStream fs = new FileOutputStream(new File(SOURCE_OUT+i));
                if(i!=count){
                    fc.read(dst,SIZE*i);
                    fs.write(dst.array());
                }else{
                    fileSize = fileSize -SIZE*count;
                    System.out.println(fileSize);
                    ByteBuffer dstTail = ByteBuffer.allocate((int) fileSize);
                    fs.write(dstTail.array());
                }
                fs.flush();
                dst.clear();
            }
        
        }
        
        /**
         * 合并文件
         * @throws Exception
         */
        public static void merge()throws Exception{
            File parentFile = new File(SOURCE_OUT);
            File fileDst = new File(DST);
            FileChannel fs =  new FileOutputStream(fileDst, true).getChannel();
            try{
                 for(File file :parentFile.listFiles()){
                     FileChannel fc = new FileInputStream(file).getChannel();
                     ByteBuffer by = ByteBuffer.allocate((int) fc.size());
                     fc.read(by);
                     by.position(0);
                     fs.write(by);
                     
                 }
            }finally{
                fs.close();
            }
        }
    }
  • 相关阅读:
    Python的logging模块
    Python中的json模块
    Python的re模块
    NoSQL简介
    单例设计模式
    基于配置文件的方式配置AOP
    重用切点表达式
    切面优先级
    返回通知、异常通知、环绕通知
    后置通知
  • 原文地址:https://www.cnblogs.com/JimmyXie/p/3806317.html
Copyright © 2011-2022 走看看