最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年05月19日 15:47:17   作者:黃曉宇  
這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)按行分割大文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

簡介

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java如何生成登錄隨機(jī)驗證碼

    java如何生成登錄隨機(jī)驗證碼

    這篇文章主要為大家詳細(xì)介紹了java如何生成登錄隨機(jī)驗證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • SpringBoot使用Graylog日志收集的實現(xiàn)示例

    SpringBoot使用Graylog日志收集的實現(xiàn)示例

    Graylog是一個生產(chǎn)級別的日志收集系統(tǒng),集成Mongo和Elasticsearch進(jìn)行日志收集,這篇文章主要介紹了SpringBoot使用Graylog日志收集的實現(xiàn)示例,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 詳解spring整合shiro權(quán)限管理與數(shù)據(jù)庫設(shè)計

    詳解spring整合shiro權(quán)限管理與數(shù)據(jù)庫設(shè)計

    這篇文章主要介紹了詳解spring整合shiro權(quán)限管理與數(shù)據(jù)庫設(shè)計,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot2中使用@RequestHeader獲取請求頭的方法

    SpringBoot2中使用@RequestHeader獲取請求頭的方法

    springMVC/SpringBoot中提供了@RequestHeader注解用來獲取請求頭。本文就詳細(xì)的來介紹一下如何使用,感興趣的可以了解下
    2021-10-10
  • Java導(dǎo)出Excel動態(tài)表頭的示例詳解

    Java導(dǎo)出Excel動態(tài)表頭的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java導(dǎo)出Excel動態(tài)表頭的相關(guān)知識,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以了解下
    2025-02-02
  • java對象初始化順序驗證示例

    java對象初始化順序驗證示例

    以下這段小程序?qū)φ{(diào)用對象構(gòu)造函數(shù)時,父類構(gòu)造函數(shù)、成員變量初始化函數(shù),以及非靜態(tài)初始化塊調(diào)用順序進(jìn)行驗證,不考慮靜態(tài)成員及靜態(tài)初始化塊
    2014-02-02
  • 基于java中BlockingQueue的使用介紹

    基于java中BlockingQueue的使用介紹

    本篇文章小編為大家介紹,基于java中BlockingQueue的使用介紹。需要的朋友參考下
    2013-04-04
  • Java繼承概念詳細(xì)解讀

    Java繼承概念詳細(xì)解讀

    這篇文章主要介紹了Java繼承概念詳細(xì)解讀,涉及繼承的概念,合成的語法等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java嵌套類和內(nèi)部類詳解

    Java嵌套類和內(nèi)部類詳解

    這篇文章主要介紹了Java嵌套類和內(nèi)部類詳解,本文講解了什么是嵌套類及內(nèi)部類、靜態(tài)嵌套類、在外部類中定義內(nèi)部類、在方法中定義內(nèi)部類、匿名內(nèi)部類等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • SpringCloud如何根據(jù)服務(wù)名獲取服務(wù)運(yùn)行實例并進(jìn)行負(fù)載均衡

    SpringCloud如何根據(jù)服務(wù)名獲取服務(wù)運(yùn)行實例并進(jìn)行負(fù)載均衡

    文章介紹了SpringCloud中使用Nacos作為注冊中心時,服務(wù)注冊和發(fā)現(xiàn)的過程,以及如何通過DiscoveryClient接口和LoadBalancerClient類進(jìn)行服務(wù)的負(fù)載均衡,感興趣的朋友跟隨小編一起看看吧
    2025-01-01

最新評論

萝北县| 紫云| 文登市| SHOW| 内丘县| 九江县| 西充县| 靖安县| 繁昌县| 秦皇岛市| 阳城县| 夏河县| 耒阳市| 来安县| 隆德县| 新乡市| 修文县| 麻栗坡县| 宜黄县| 江门市| 峨眉山市| 辽阳县| 湖州市| 九江县| 奉贤区| 枞阳县| 昌都县| 元朗区| 泾阳县| 昭通市| 柳江县| 巨野县| 乌拉特中旗| 维西| 庄河市| 贺兰县| 高陵县| 台中市| 佛山市| 盘锦市| 普定县|