真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java如何實現(xiàn)按行分割大文件

小編這次要給大家分享的是Java如何實現(xiàn)按行分割大文件,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設,皋蘭企業(yè)網(wǎng)站建設,皋蘭品牌網(wǎng)站建設,網(wǎng)站定制,皋蘭網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,皋蘭網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

簡介

工作的時候,需要將一個大的文本文件按行分割成幾個小文件。本來懶得寫,想網(wǎng)上copy一下得了,但是 google 了一遍,找了幾個代碼寫的有點亂,嘗試了之后發(fā)現(xiàn)效率太慢了,一個 1000000 行 200M 的文件,按每個文件 2000 行分割,要6分多鐘才能跑完。沒辦法自己寫了個,試了幾次,基本都是 4 秒內(nèi)跑完,貼出來記錄下,下次用就直接 copy 出來用。

代碼

public static List splitDataToSaveFile(int rows, File sourceFile, String targetDirectoryPath) {
  long startTime = System.currentTimeMillis();
  List 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("分割文件結(jié)束,耗時:{}秒", (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如何實現(xiàn)按行分割大文件的文章,如果覺得文章內(nèi)容寫得不錯的話,可以把它分享出去給更多人看到。


網(wǎng)頁標題:Java如何實現(xiàn)按行分割大文件
本文來源:http://weahome.cn/article/gcssdg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部