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;
}