iscomar001
11/30/2018 - 11:17 PM

Split File

Split file

public static List<File> splitFile(File fileInput, long maxMB) throws UtilException{
        
    long oneMB = 1024 * 1024;
    
    logger.debug("Split File: " + fileInput.getAbsolutePath());
    logger.debug("File Size MB: " + FileUtils.sizeOf(fileInput)/oneMB);
    logger.debug("Max MB: " + maxMB);
    logger.debug("File Split Aprox: " + (FileUtils.sizeOf(fileInput)/oneMB)/maxMB);
    
    
    List<File> listFiles =  new ArrayList<File>();
    int lineTest = 50; 
    int numberLine = 0;
    boolean createNewFile = true;
    
    String fileName = fileInput.getName();
    String path = fileInput.getParent();
    String fileExtencion = fileName.substring(fileName.indexOf("."), fileName.length());
    fileName = fileName.substring(0,fileName.indexOf("."));
    
    try {
        if (FileUtils.sizeOf(fileInput)/oneMB <= maxMB ) {
            logger.debug("File size less: " + FileUtils.sizeOf(fileInput)/oneMB + " MB");
            listFiles.add(fileInput);
        }else{
            
            String newFileName = "";
            File file = null;
            
            LineIterator it = FileUtils.lineIterator(fileInput, "UTF-8");
            try {
                while (it.hasNext()) {
                    
                    if (createNewFile) {
                        newFileName = path + File.separator + fileName + "_" + StringUtils.leftPad(""+(listFiles.size()+1), 3, "0") + fileExtencion;
                        file = new File(newFileName);
                        listFiles.add(file);
                        createNewFile = false;
                        
                         logger.debug("new File: " + file.getName());
                    }else{
                        FileUtils.write(file, "\n", true);
                    }
                    numberLine++;
                    
                    FileUtils.write(file, it.nextLine(), true);
                    
                    if (numberLine%lineTest == 0) {
                        if (FileUtils.sizeOf(file)/oneMB >= maxMB ) {
                            createNewFile = true;
                        }
                    }
                }
            } finally {
                LineIterator.closeQuietly(it);
            }
            
        }
        
    }   catch (IOException ex) {
        throw  new UtilException("Error al hacer split al archivo ERROR: " + ex.getMessage());
    }
    
    
    logger.debug("File split in: " + listFiles.size());
    return listFiles;
    
}