java大数据文件写下读取分割排序合并.docx

上传人:b****6 文档编号:7718933 上传时间:2023-01-26 格式:DOCX 页数:7 大小:16.58KB
下载 相关 举报
java大数据文件写下读取分割排序合并.docx_第1页
第1页 / 共7页
java大数据文件写下读取分割排序合并.docx_第2页
第2页 / 共7页
java大数据文件写下读取分割排序合并.docx_第3页
第3页 / 共7页
java大数据文件写下读取分割排序合并.docx_第4页
第4页 / 共7页
java大数据文件写下读取分割排序合并.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

java大数据文件写下读取分割排序合并.docx

《java大数据文件写下读取分割排序合并.docx》由会员分享,可在线阅读,更多相关《java大数据文件写下读取分割排序合并.docx(7页珍藏版)》请在冰豆网上搜索。

java大数据文件写下读取分割排序合并.docx

java大数据文件写下读取分割排序合并

java:

大数据文件写下,读取,分割,排序,合并

java:

大数据文件写入,读取,分割,排序,合并

/**

 *大数据排序合并

 * 

 *@paramargs

 */

 publicstaticvoidmain(String[]args)throwsIOException{

  //写入文件的路径

  StringfilePath="D:

\\456";

  //切分文件的路径

  StringsqlitFilePath="D:

\\456\\123";

  //数据的个数

  intCountNumbers=10000000;

  

  //子文件的个数

  intCountFile=10;

  

  //精度

  intcountAccuracy=30*CountFile;

  

  longstartNumber=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("整合完毕");

  longstopNumber=System.currentTimeMillis();

  System.out.println("耗时"+(stopNumber-startNumber)/1000+"毫秒");

 }

 //写入大数据文件

 publicstaticvoidWriteData(Stringpath,intCountNumbers)throwsIOException{

  path=path+"\\12114.txt";

  FileWriterfs=newFileWriter(path);

  BufferedWriterfw=newBufferedWriter(fs);

  for(inti=0;i

   fw.write(newRandom().nextInt(Integer.MAX_VALUE)+"\r\n");

  }

  fw.close();

  fs.close();

  

 }

 //将大数据文件切分到另外的十个小文件中

 publicstaticvoidsqlitFileDate(Stringfilepath,StringsqlitPath,

   intCountFile)throwsIOException{

  FileWriterfs=null;

  BufferedWriterfw=null;

  FileReaderfr=newFileReader(filepath+"\\12114.txt");

  BufferedReaderbr=newBufferedReader(fr);//读取获取整行数据

  

  inti=1;

  LinkedListWriterLists=newLinkedList();   //初始化文件流对象集合

  LinkedListfwLists=newLinkedList();

  for(intj=1;j<=CountFile;j++){

   

   //声明对象

   fs=newFileWriter(sqlitPath+"\\12"+j+".txt",false);

   fw=newBufferedWriter(fs);

    

    

   //将对象装入集合

   WriterLists.add(fs);

   fwLists.add(fw);

  }

  //判断是文件流中是否还有数据返回

  while(br.ready()){

   

   intcount=1;//初始化第一文件流

   for(Iteratoriterator=fwLists.iterator();iterator.hasNext();){

    BufferedWritertype=(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(Iteratoriterator=fwLists.iterator();iterator.hasNext();){

   BufferedWriterobject=(BufferedWriter)iterator.next();

   object.close();

  }

  //遍历关闭所有子文件流

  for(Iteratoriterator=WriterLists.iterator();iterator.hasNext();){

   FileWriterobject=(FileWriter)iterator.next();

   object.close();

  }

 }

 //把每个文件的数据进行排序

 publicstaticvoidsingleFileDataSort(Stringpath1,intCountFile)throwsIOException{

  LinkedListnums=null;

  for(inti=1;i<=CountFile;i++){

   nums=newLinkedList();

   Stringpath=path1+"\\12"+i+".txt";

   try{

    FileReaderfr=newFileReader(path);

    BufferedReaderbr=newBufferedReader(fr);

    while(br.ready()){

     //将读取的单个数据加入到集合里面

     nums.add(Integer.parseInt(br.readLine()));

    }

    //对集合进行排序

    Collections.sort(nums);

    //将排序好的数据写入源文件

    numberSort(nums,path);

    br.close();

    fr.close();

   }catch(NumberFormatExceptione){

    e.printStackTrace();

   }catch(FileNotFoundExceptione){

    e.printStackTrace();

   }catch(IOExceptione){

    e.printStackTrace();

   }

  }

 }

 //对每个文件数据进行排序,再写入源文件

 publicstaticvoidnumberSort(LinkedListlist,Stringpath){

  try{

   FileWriterfs=newFileWriter(path);

   BufferedWriterfw=newBufferedWriter(fs);

   for(Iteratoriterator=list.iterator();iterator.hasNext();){

    Objectobject=(Object)iterator.next();

    fw.write(object+"\r\n");

   }

   fw.close();

   fs.close();

  }catch(IOExceptione){

   e.printStackTrace();

  }

 }

 //文件数据最终整合(精度调整)

 publicstaticvoiddeathDataFile(Stringfilepath,StringsqlitFilePath1,

   intcountAccuracy,intCountFile)throwsIOException{

  LinkedListnums=newLinkedList();                                      //添加数据,进行排序

  Objecttemp=null;                                                      //记录每次排序剩下的最后一个数字

  booleanispass=false;

  LinkedListispasses=null;                                              //记录数据文件的状态信息

  FileWriterfs=newFileWriter(filepath+"\\Sort.txt",false);          //创建文件流,以便整合的数据写入

  BufferedWriterbw=newBufferedWriter(fs);

  FileReaderfr=null;                                                    //声明读取文件流

  BufferedReaderbr=null;                                                //声明BufferedReader

  LinkedListWriterLists=newLinkedList();//初始化文件流对象集合

  LinkedListWriterListFile=newLinkedList();

  for(intj=1;j<=CountFile;j++){

   //声明对象,开启所有子文件流访问所有子文件的数据

   fr=newFileReader(sqlitFilePath1+"\\12"+j+".txt");

   

   //开启所有BufferedReader,方便下次的整行的读取

   br=newBufferedReader(fr);

   

   //将所有FileReader对象装入集合

   WriterListFile.add(fr);

   

   //将所有BufferedReader对象装入集合

   WriterLists.add(br);

  }

  for(;;){

   //将十个源文件的是否有数据情况存入集合,以方便后面做判断

   ispasses=newLinkedList();

   

   //分别读取十个源文件的单个数据

   for(Iteratoriterator=WriterLists.iterator();iterator.hasNext();){

    BufferedReaderobject=(BufferedReader)iterator.next();

    Objectobj=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=newLinkedList();

    //添加上一组比较剩下的数据

    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=newLinkedList();

     nums.add(temp);

     continue;

    }

   }

   //记录下一组数据的位置

   //判断是不是十个文件都没有数据

   if(ispasses.size()==CountFile){

    Collections.sort(nums);

    temp=numberSortData(nums,filepath,true,countAccuracy,bw);

    nums=newLinkedList();

    break;

   }

  }

  bw.close();

  //关闭写入流

  fs.close();

  

  //关闭所有的BufferedReader

  for(Iteratoriterator=WriterLists.iterator();iterator.hasNext();){

   BufferedReaderobject2=(BufferedReader)iterator.next();

   object2.close();

  }

  

  //关闭所有的FileReader

  for(Iteratoriterator=WriterListFile.iterator();iterator.hasNext();){

   FileReaderobject=(FileReader)iterator.next();

   object.close();

  }

 }

 //对数据进行排序,写入最终文件中(精度调整)

 publicstaticObjectnumberSortData(LinkedListlist,StringfilePath,

   booleanispass,intcountAccuracy,BufferedWriterfs){

  Objecttemp=0;                                                       //记录最后一个值

  inttempCount=0;                                                     //记录写入的数据位置

  try{

   for(Iteratoriterator=list.iterator();iterator.hasNext();){

    Objectobject=(Object)iterator.next();

    //判断是否是最后一个数

    if(tempCount==list.size()-1){

     //判断集合里面不足一百個數了

     if(list.size()

      temp=null;

     }else{

      temp=object;

      break;

     }

    }

    //写入数据源

    fs.write(object+"\r\n");

    //记录数据的下标

    tempCount++;

   }

  }catch(IOExceptione){

   e.printStackTrace();

  }

  returntemp;

 }

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1