简介

工作的时候,需要将一个大的文本文件按行分割成几个小文件。本来懒得写,想网上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按行分割大文件相关推荐

  1. java切割文件_Java实现按行分割大文件

    简介 工作的时候,需要将一个大的文本文件按行分割成几个小文件.本来懒得写,想网上copy一下得了,但是 gLoLdchFGpoogle 了一遍,找了几个代码写的有点乱,尝试了之后发现效率太慢了,一个 ...

  2. java 按行读取大文件文件内容_Java实现按行读取大文件

    Java实现按行读取大文件 String file = "F:" + File.separator + "a.txt"; FileInputStream fis ...

  3. Java按行读取大文件

    通常读取一个文件都是直接把这个文件转化为流的形式,但是对于一个容量为几个G的文件,这很显然是不明智的做法,当前我需要将几个G的文件读取,然后插入到数据库,使用的是一个commons的jar包,尝试了一 ...

  4. JAVA之NIO按行读写大文件,完美解决中文乱码问题

    JAVA之NIO按行读写大文件,完美解决中文乱码问题 参考文章: (1)JAVA之NIO按行读写大文件,完美解决中文乱码问题 (2)https://www.cnblogs.com/jpfss/p/89 ...

  5. java实现把一个大文件切割成N个固定大小的文件

    这个好像是我一年前去面试时的一道面试题,分享一下!考 java I/O 的! //java实现把一个大文件切割成N个固定大小的文件 package com.johnny.test; import ja ...

  6. linux中split分割文件打开方式,Linux系统下使用split命令分割大文件 (转载)

    [小蜗牛闲情之作 ] 我想给一个朋友传一个大视频,有几百M,尝试多种传输办法失败后,最后想到的是把视频切开一片片"邮递"过去给他,让它自己组装起来吧. [root@pps publ ...

  7. linux文件分割命令性能,Linux系统下使用split命令分割大文件 (转载)

    [小蜗牛闲情之作 ] 我想给一个朋友传一个大视频,有几百M,尝试多种传输办法失败后,最后想到的是把视频切开一片片"邮递"过去给他,让它自己组装起来吧. [root@pps publ ...

  8. JAVA实现服务器间拷贝文件,寻找在Java服务器之间传输大文件的好方法

    在这个项目中有一个主要的数据库服务器,其他安装在不同地方的服务器维护着自己的本地数据库.我们必须允许每个系统将其本地数据库更新为主要数据库上的任何版本.所有的服务器都运行Java环境.寻找在Java服 ...

  9. linux 分隔大文件,linux系统下分割大文件的方法

    本文介绍下在linux系统中,分割大文件的方法,比如一个5gb日志文件切割为很多小块. 在linux中分割大文件,比如一个5gb日志文件,需要把它分成多个小文件,分割后以利于普通的文本编辑器读取. 有 ...

最新文章

  1. CF703D Mishka and Interesting sum(求区间出现次数偶数次数的异或和)
  2. onresize事件会被多次触发_玩转SpringBoot之通过事件机制参与SpringBoot应用的启动过程...
  3. 用python画玫瑰花教程-利用Python的turtle库绘制玫瑰教程
  4. windows经典地雷小游戏(C语言实现)
  5. 数据中心运维管理社区祝大家新春快乐,虎年大吉!
  6. 1114 Family Property (25 分)【难度: 中/ 知识点: 并查集】
  7. 【机器学习】用PyCaret创建整个机器学习管道
  8. 编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言概念辨析
  9. 工作总结:日志打印的15个建议
  10. rpm安装与yum安装的区别与特点
  11. 当OpenOrg和OpenGov发生冲突时
  12. AndroidStudio_使用gradle编译代码_打包apk_以及各种打包配置---Android原生开发工作笔记79
  13. 使用C#的泛型队列Queue实现生产消费模式
  14. Ubuntu“ System Program Problem Detected”问题
  15. 通过pip下载的包默认位置在哪
  16. Spring学习资料
  17. Python 冒泡排序 代码实现
  18. Java基于opencv实现图像数字识别(二)—基本流程
  19. Python 百度智能云文字识别 实现手写文字识别
  20. ET1100和PHY的总结

热门文章

  1. 参观消防队社会实践活动
  2. 中国性文化史 读后感得2021-07-03
  3. 【方案】 AP9193 大功率升降压恒流驱动 3.6-100V LED理疗灯 LED灯串 恒流控制器
  4. 计算机及应用的课程论文,机器学习课程论文计算机软件及应用it计算机专业资料.doc...
  5. C#aspx页面和aspx.cs页面之间的数据交互(记录篇)
  6. [TI TDA4 J721E]PROCESSOR-SDK-J721E Demo开发板运行与测试 基于 ubuntu 18.04
  7. Kubernetes 是什么 ?
  8. URL地址中的斜杠/和反斜杠\
  9. 使用redis 加锁的方式生成订单号
  10. anaconda+python3.7+win10安装dlib_Windows系统下 Python(Anaconda)的 Dlib库 的安装