介绍
小编这次要给大家分享的是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如何实现按行分割大文件的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。