当前位置:编程学习 > JAVA >>

用java实现大文件分割与合并

[java 
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 + "\\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 + "\\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 + "\\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;  
    &
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,