亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java實現大文件分割與合并的實例代碼

2019-11-26 16:13:44
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

package com.test; 


import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.Collections; 
import java.util.Iterator; 
import java.util.LinkedList; 
import java.util.Random; 

public class LargeMappedFiles { 
    /**
      * 大數據排序合并
      * 
      * @param args
      */ 
     public static void main(String[] args) throws IOException { 
      // 寫入文件的路徑  
      String filePath = "D://456"; 
      // 切分文件的路徑  
      String sqlitFilePath = "D://456//123"; 
      //數據的個數  
      int CountNumbers=10000000; 

      //子文件的個數  
      int CountFile=10; 

      //精度  
      int countAccuracy=30*CountFile; 

      long startNumber=System.currentTimeMillis(); 
      // 寫入大數據文件  
      WriteData(filePath,CountNumbers); 
      System.out.println("存儲完畢"); 

      // 將大數據文件切分到另外的十個小文件中  
      sqlitFileDate(filePath, sqlitFilePath,CountFile); 
      System.out.println("文件切割完畢!"); 
      // 把每個文件的數據進行排序  
      singleFileDataSort(sqlitFilePath,CountFile); 
      System.out.println("每個子文件排序完畢!"); 

      //精度調整,十個文件數據進行比較整合  
      deathDataFile(filePath,sqlitFilePath,countAccuracy,CountFile); 
      System.out.println("整合完畢"); 
      long stopNumber=System.currentTimeMillis(); 
      System.out.println("耗時"+(stopNumber-startNumber)/1000+"毫秒"); 
     } 
     // 寫入大數據文件  
     public static void WriteData(String path,int CountNumbers) throws IOException { 
      path = path + "http://12114.txt"; 
      FileWriter fs = new FileWriter(path); 
      BufferedWriter fw=new BufferedWriter(fs); 
      for (int i = 0; i < CountNumbers; i++) { 
       fw.write(new Random().nextInt(Integer.MAX_VALUE) + "/r/n"); 
      } 
      fw.close(); 
      fs.close(); 

     } 
     // 將大數據文件切分到另外的十個小文件中  
     public static void sqlitFileDate(String filepath, String sqlitPath, 
       int CountFile) throws IOException { 
      FileWriter fs = null; 
      BufferedWriter fw=null; 
      FileReader fr = new FileReader(filepath + "http://12114.txt"); 
      BufferedReader br = new BufferedReader(fr); // 讀取獲取整行數據  

      int i = 1; 
      LinkedList WriterLists=new LinkedList();    //初始化文件流對象集合  
      LinkedList fwLists=new LinkedList(); 
      for (int j = 1; j <= CountFile; j++) { 

        //聲明對象  
        fs = new FileWriter(sqlitPath + "http://12" + j + ".txt",false); 
        fw=new BufferedWriter(fs); 

         
        //將對象裝入集合  
        WriterLists.add(fs); 
        fwLists.add(fw); 
      } 
      //判斷是文件流中是否還有數據返回  
      while (br.ready()) { 

       int count=1;//初始化第一文件流  
       for (Iterator iterator = fwLists.iterator(); iterator.hasNext();) { 
        BufferedWriter type = (BufferedWriter) iterator.next(); 
        if(i==count)//判斷輪到第幾個文件流寫入數據了  
        { 
         //寫入數據,跳出,進行下一個文件流,下一個數據的寫入  
         type.write(br.readLine() + "/r/n"); 
         break; 
        } 
        count++; 
       } 
       //判斷是否到了最后一個文件流了  
       if (i >= CountFile) { 
        i = 1; 
       } else 
        i++; 
      } 
      br.close(); 
      fr.close(); 
      for (Iterator iterator = fwLists.iterator(); iterator.hasNext();) { 
       BufferedWriter object = (BufferedWriter) iterator.next(); 
       object.close(); 
      } 
      //遍歷關閉所有子文件流  
      for (Iterator iterator = WriterLists.iterator(); iterator.hasNext();) { 
       FileWriter object = (FileWriter) iterator.next(); 
       object.close(); 
      } 
     } 
     // 把每個文件的數據進行排序  
     public static void singleFileDataSort(String path1,int CountFile) throws IOException { 
      LinkedList nums = null; 
      for (int i = 1; i <= CountFile; i++) { 
       nums = new LinkedList(); 
       String path = path1 + "http://12" + i + ".txt"; 
       try { 
        FileReader fr = new FileReader(path); 
        BufferedReader br = new BufferedReader(fr); 
        while (br.ready()) { 
         // 將讀取的單個數據加入到集合里面  
         nums.add(Integer.parseInt(br.readLine())); 
        } 
        // 對集合進行排序  
        Collections.sort(nums); 
        // 將排序好的數據寫入源文件  
        numberSort(nums, path); 
        br.close(); 
        fr.close(); 
       } catch (NumberFormatException e) { 
        e.printStackTrace(); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     // 對每個文件數據進行排序,再寫入源文件  
     public static void numberSort(LinkedList list, String path) { 
      try { 
       FileWriter fs = new FileWriter(path); 
       BufferedWriter fw=new BufferedWriter(fs); 
       for (Iterator iterator = list.iterator(); iterator.hasNext();) { 
        Object object = (Object) iterator.next(); 
        fw.write(object + "/r/n"); 
       } 
       fw.close(); 
       fs.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     // 文件數據最終整合(精度調整)  
     public static void deathDataFile(String filepath, String sqlitFilePath1, 
       int countAccuracy, int CountFile) throws IOException { 
      LinkedList nums = new LinkedList();                                       //添加數據,進行排序  
      Object temp = null;                                                       // 記錄每次排序剩下的最后一個數字  
      boolean ispass = false; 
      LinkedList ispasses = null;                                               //記錄數據文件的狀態信息  
      FileWriter fs = new FileWriter(filepath + "http://Sort.txt", false);           //創建文件流,以便整合的數據寫入  
      BufferedWriter bw=new BufferedWriter(fs); 
      FileReader fr = null;                                                     //聲明讀取文件流  
      BufferedReader br = null;                                                 //聲明BufferedReader  
      LinkedList WriterLists = new LinkedList(); // 初始化文件流對象集合  
      LinkedList WriterListFile = new LinkedList(); 
      for (int j = 1; j <= CountFile; j++) { 
       // 聲明對象,開啟所有子文件流訪問所有子文件的數據  
       fr = new FileReader(sqlitFilePath1 + "http://12" + j + ".txt"); 

       //開啟所有BufferedReader,方便下次的整行的讀取  
       br = new BufferedReader(fr); 

       // 將所有 FileReader對象裝入集合  
       WriterListFile.add(fr); 

       // 將所有 BufferedReader對象裝入集合  
       WriterLists.add(br); 
      } 
      for (;;) { 
       // 將十個源文件的是否有數據情況存入集合,以方便后面做判斷  
       ispasses = new LinkedList(); 

       // 分別讀取十個源文件的單個數據  
       for (Iterator iterator = WriterLists.iterator(); iterator.hasNext();) { 
        BufferedReader object = (BufferedReader) iterator.next(); 
        Object obj = null; 
        while (object.ready()) { 
         //添加所有文件流的每次的數據  
         nums.add(Integer.parseInt(object.readLine().toString())); 
         break; 
        } 
        if (object.ready() == false) 
         ispasses.add("true");           //將各文件中的數據狀態存入集合中  
       } 

       // 決斷是否是第一次進來  
       if (nums.size() % countAccuracy == 0 && ispass == false) { 
        // 對集合進行排序  
        Collections.sort(nums); 
        // 接收最大的數據,其它的數據寫入總排序文件  
        temp = numberSortData(nums, filepath, false, countAccuracy, bw); 

        //重新初始化集合  
        nums = new LinkedList(); 
        // 添加上一組比較剩下的數據  
        nums.add(temp); 
        ispass = true; 
        // 記錄源文件的數據數量,以便下次的遍歷  
        continue; 
       } 
       if (ispass) { 
        if (nums.size() % countAccuracy == 1 && nums.size() > 1) { 
         // 對集合進行排序  
         Collections.sort(nums); 
         // 接收最大的數據,其它的數據寫入總排序文件  
         temp = numberSortData(nums, filepath, true, countAccuracy, 
           bw); 
         nums = new LinkedList(); 
         nums.add(temp); 
         continue; 
        } 
       } 
       // 記錄下一組數據的位置  
       // 判斷是不是十個文件都沒有數據  
       if (ispasses.size() == CountFile) { 
        Collections.sort(nums); 
        temp = numberSortData(nums, filepath, true, countAccuracy, bw); 
        nums = new LinkedList(); 
        break; 
       } 
      } 
      bw.close(); 
      //關閉寫入流  
      fs.close(); 

      //關閉所有的BufferedReader  
      for (Iterator iterator = WriterLists.iterator(); iterator.hasNext();) { 
       BufferedReader object2 = (BufferedReader) iterator.next(); 
       object2.close(); 
      } 

      //關閉所有的FileReader  
      for (Iterator iterator = WriterListFile.iterator(); iterator.hasNext();) { 
       FileReader object = (FileReader) iterator.next(); 
       object.close(); 
      } 
     } 
     // 對數據進行排序,寫入最終文件中(精度調整)  
     public static Object numberSortData(LinkedList list, String filePath, 
       boolean ispass, int countAccuracy,BufferedWriter fs) { 
      Object temp = 0;                                                        //記錄最后一個值  
      int tempCount = 0;                                                      //記錄寫入的數據位置  
      try { 
       for (Iterator iterator = list.iterator(); iterator.hasNext();) { 
        Object object = (Object) iterator.next(); 
        // 判斷是否是最后一個數  
        if (tempCount == list.size() - 1) { 
         // 判斷集合里面不足一百亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

亚洲综合av影视| 亚洲精品福利资源站| 亚洲一二三在线| 精品视频在线导航| 亚洲va码欧洲m码| 亚洲欧美国产一区二区三区| 蜜月aⅴ免费一区二区三区| 91精品啪aⅴ在线观看国产| 富二代精品短视频| 国产专区精品视频| 国产一区二区美女视频| 日韩av不卡在线| 在线观看日韩专区| 91网站在线免费观看| 欧美精品在线观看| 欧美性猛交xxxx免费看久久久| 精品亚洲一区二区三区四区五区| 欧美午夜丰满在线18影院| 日本精品久久久| 欧美另类极品videosbest最新版本| 国产成人久久精品| 久热99视频在线观看| 在线日韩精品视频| 国产精品福利无圣光在线一区| 精品av在线播放| 欧美中文在线视频| 亚洲精品久久久久久久久久久久久| 国产精品久久久91| 国产精品日日摸夜夜添夜夜av| 欧洲成人在线视频| 欧美在线xxx| 亚洲欧洲国产伦综合| 日韩精品在线免费观看视频| 亚洲国产欧美在线成人app| 亚洲精品国偷自产在线99热| 久久精品国产一区| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲xxx自由成熟| 91九色精品视频| 亚洲视频在线观看视频| 成人综合国产精品| 97免费视频在线播放| 青青久久av北条麻妃海外网| 992tv在线成人免费观看| 久久亚洲精品视频| 国产精品99久久久久久人| 91九色国产社区在线观看| 国产精品羞羞答答| 精品久久久香蕉免费精品视频| 大伊人狠狠躁夜夜躁av一区| 91亚洲va在线va天堂va国| 久色乳综合思思在线视频| 国产成人91久久精品| 亚洲精品wwww| 日本欧美在线视频| 亚洲美女av在线| 亚洲欧美国产va在线影院| 日韩高清人体午夜| 国产精品劲爆视频| 久久91亚洲精品中文字幕| 成人性生交大片免费看小说| 成人情趣片在线观看免费| 欧美在线免费观看| 色偷偷av一区二区三区乱| 亚洲激情第一页| 欧美日韩国产麻豆| 奇米影视亚洲狠狠色| 97人洗澡人人免费公开视频碰碰碰| 欧美日韩中文在线| 国产精品久久久久秋霞鲁丝| 92版电视剧仙鹤神针在线观看| 91美女片黄在线观| 国产日韩中文在线| 中文字幕日韩在线观看| 狠狠色狠狠色综合日日小说| 欧美激情精品久久久久久久变态| 日韩精品视频中文在线观看| 亚洲自拍偷拍第一页| 亚洲国模精品一区| 日韩精品在线观看一区| 成人激情视频网| 欧洲永久精品大片ww免费漫画| 不卡在线观看电视剧完整版| 久久久亚洲欧洲日产国码aⅴ| 色综合色综合网色综合| 亚洲国产成人在线视频| 57pao成人永久免费视频| 亚洲美女福利视频网站| 成人黄色激情网| 91干在线观看| 九九久久国产精品| 一区二区亚洲欧洲国产日韩| 国产精品午夜国产小视频| 91天堂在线观看| 日本一区二区三区在线播放| 中文字幕亚洲色图| 日韩精品免费在线视频观看| 欧美猛交ⅹxxx乱大交视频| 91精品免费视频| 国产精品一区二区女厕厕| 亚洲国产精品久久91精品| 91热精品视频| 国产亚洲在线播放| 亚洲成人999| 成人精品久久av网站| 国产精品成人v| 日韩在线精品视频| 亚洲福利视频久久| 国产999精品久久久| 欧美黄色片在线观看| 亚洲精品中文字幕av| 日韩av免费在线看| 日韩黄色高清视频| 国产精品久久婷婷六月丁香| 久久久爽爽爽美女图片| 国产精品久久久久久亚洲影视| 国产精品福利在线| 亚洲精品91美女久久久久久久| 久久躁日日躁aaaaxxxx| 亚洲欧美激情四射在线日| 午夜精品理论片| 久久露脸国产精品| 欧美在线观看网站| 久久免费精品视频| 国产精品久久久久影院日本| 久久久之久亚州精品露出| 日韩高清av一区二区三区| 欧美色道久久88综合亚洲精品| 久久福利网址导航| 91在线中文字幕| 精品久久久久久久久国产字幕| 国产va免费精品高清在线观看| 亚洲国产91精品在线观看| 久久在线视频在线| 主播福利视频一区| 亚洲精品suv精品一区二区| 国产精品久久久久久久美男| 日韩精品中文字幕有码专区| 色婷婷av一区二区三区久久| 日韩美女中文字幕| 亚洲精品日韩欧美| 国产国产精品人在线视| 日韩av快播网址| 欧美乱人伦中文字幕在线| 菠萝蜜影院一区二区免费| 欧美丰满少妇xxxxx| 欧美午夜久久久| 亚洲欧洲一区二区三区在线观看| 久久亚洲精品中文字幕冲田杏梨| 亚洲精品一区二区久| 在线观看国产欧美| 欧美巨猛xxxx猛交黑人97人| 日韩国产一区三区| 欧美又大又粗又长| 日本精品一区二区三区在线| xxxxxxxxx欧美| 亚洲精品黄网在线观看| 亚洲成人999| 国产日韩欧美在线播放| 97久久精品人搡人人玩| 亚洲精品国产电影| 91在线免费看网站| 亚洲free性xxxx护士白浆| 亚洲精品久久在线|