大量のデータをファイルに読み込み、ソートを分割


1、mysqlから大量のデータを読み込み、ファイルに書き込み、ファイルを分割してソートする.次はテスト例です.コードの表示:
/**
 * Created by xxx on 2016/8/29.
 */

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 CombinationSortWrite {
    /**
     *        
     *  msql       ,    ,      
     */
    public static void main(String[] args) throws IOException {
        //        
        String filePath = "D:\\456";
        //        
        String sqlitFilePath = "D:\\456\\123";

        //     
        int CountNumbers = 1000000;

        //      
        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
"
); } 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
"
); 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 + "\\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
"
); } 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 + "\\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 + "\\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) { // if (list.size() < countAccuracy + 1 && ispass) { temp = null; } else { temp = object; break; } } // fs.write(object + "\r
"
); // tempCount++; } } catch (IOException e) { e.printStackTrace(); } return temp; } }