Java如何实现按行分割大文件

  介绍

小编这次要给大家分享的是Java如何实现按行分割大文件,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。

<强>简介

工作的时候,需要将一个大的文本文件按行分割成几个小文件。本来懒得写,想网上复制一下得了,但是谷歌了一遍,找了几个代码写的有点乱,尝试了之后发现效率太慢了,一个1000000行,200的文件,按每个文件2000行分割,要6分多钟才能跑完。没办法自己写了个,试了几次,基本都是4秒内跑完,贴出来记录下,下次用就直接出复制来用。

<强>代码

公共静态ListsplitDataToSaveFile (int行、文件源文件、字符串targetDirectoryPath) {
  长时间的开始时间=System.currentTimeMillis ();
  List,文件列表=new ArrayList<的在();
  log.info(“开始分割文件“);
  文件targetFile=新文件(targetDirectoryPath);
  如果(! sourceFile.exists() | |行& lt;=0 | | sourceFile.isDirectory ()) {
  返回null;
  }
  如果(targetFile.exists ()) {
  如果(! targetFile.isDirectory ()) {
  返回null;
  }
  其他}{
  targetFile.mkdirs ();
  }
  
  试(FileInputStream FileInputStream=new FileInputStream(源文件);
  InputStreamReader InputStreamReader=new InputStreamReader (fileInputStream, StandardCharsets.UTF_8);
  BufferedReader BufferedReader=new BufferedReader (inputStreamReader)) {
  StringBuilder StringBuilder=new StringBuilder ();
  字符串lineStr;
  int lineNo=1, fileNum=1;
  在((lineStr=bufferedReader.readLine ()) !=null) {
  stringBuilder.append (lineStr) .append (“\ r \ n");
  如果(lineNo %行==0){
  文件文件=新文件(targetDirectoryPath +文件。分离器+ fileNum + sourceFile.getName ());
  writeFile (stringBuilder.toString()、文件);//清空文本
  stringBuilder.delete (0, stringBuilder.length ());
  fileNum + +;
  fileList.add(文件);
  }
  lineNo + +;
  }
  如果((lineNo - 1) %行!=0){
  文件文件=新文件(targetDirectoryPath +文件。分离器+ fileNum + sourceFile.getName ());
  writeFile (stringBuilder.toString()、文件);
  fileList.add(文件);
  }
  长endTime=System.currentTimeMillis ();
  log.info(“分割文件结束,耗时:{}秒“,(endTime -开始时间)/1000);
  }捕捉(异常e) {
  log.error(“分割文件异常“,e);
  }
  返回文件列表;
  }
  
  私有静态孔隙writeFile(字符串文本、文件文件){
  试(
  FileOutputStream FileOutputStream=new FileOutputStream(文件);
  OutputStreamWriter OutputStreamWriter=new OutputStreamWriter (fileOutputStream StandardCharsets.UTF_8);
  BufferedWriter BufferedWriter=new BufferedWriter (outputStreamWriter, 1024)
  ){
  bufferedWriter.write(文本);
  }捕捉(IOException e) {
  e.printStackTrace ();
  }
  }

看完这篇关于Java如何实现按行分割大文件的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。

Java如何实现按行分割大文件