Java实现按行分割大文件
更新时间:2020年05月19日 15:47:17 作者:黄晓宇
这篇文章主要为大家详细介绍了Java实现按行分割大文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
简介
工作的时候,需要将一个大的文本文件按行分割成几个小文件。本来懒得写,想网上copy一下得了,但是 google 了一遍,找了几个代码写的有点乱,尝试了之后发现效率太慢了,一个 1000000 行 200M 的文件,按每个文件 2000 行分割,要6分多钟才能跑完。没办法自己写了个,试了几次,基本都是 4 秒内跑完,贴出来记录下,下次用就直接 copy 出来用。
代码
public static List<File> splitDataToSaveFile(int rows, File sourceFile, String targetDirectoryPath) { long startTime = System.currentTimeMillis(); List<File> fileList = new ArrayList<>(); log.info("开始分割文件"); File targetFile = new File(targetDirectoryPath); if (!sourceFile.exists() || rows <= 0 || sourceFile.isDirectory()) { return null; } if (targetFile.exists()) { if (!targetFile.isDirectory()) { return null; } } else { targetFile.mkdirs(); } try (FileInputStream fileInputStream = new FileInputStream(sourceFile); InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8); BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) { StringBuilder stringBuilder = new StringBuilder(); String lineStr; int lineNo = 1, fileNum = 1; while ((lineStr = bufferedReader.readLine()) != null) { stringBuilder.append(lineStr).append("\r\n"); if (lineNo % rows == 0) { File file = new File(targetDirectoryPath + File.separator + fileNum + sourceFile.getName()); writeFile(stringBuilder.toString(), file); //清空文本 stringBuilder.delete(0, stringBuilder.length()); fileNum++; fileList.add(file); } lineNo++; } if ((lineNo - 1) % rows != 0) { File file = new File(targetDirectoryPath + File.separator + fileNum + sourceFile.getName()); writeFile(stringBuilder.toString(), file); fileList.add(file); } long endTime = System.currentTimeMillis(); log.info("分割文件结束,耗时:{}秒", (endTime - startTime) / 1000); } catch (Exception e) { log.error("分割文件异常", e); } return fileList; } private static void writeFile(String text, File file) { try ( FileOutputStream fileOutputStream = new FileOutputStream(file); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter, 1024) ) { bufferedWriter.write(text); } catch (IOException e) { e.printStackTrace(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Java SpringBoot安全框架整合Spring Security详解
这篇文章主要介绍了Spring Boot整合Spring Security的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2021-09-09IDEA中程序包Org.Springframework.Boot不存在问题及解决
这篇文章主要介绍了IDEA中程序包Org.Springframework.Boot不存在问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-07-07
最新评论