多线程拆分,合并文件

package sample3;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

public class SplitSweatshop {
    
    public static int ordersCount = 30;
    public static int employeeCount = 3;
    /**
     * @param args
     * @throws ExecutionException
     * @throws InterruptedException
     * @throws Exception
     */
    public static void main(String[] args) throws InterruptedException, ExecutionException  {
        // TODO Auto-generated method stub
        // CountDownLatch doneSignal = new CountDownLatch(ordersCount);
         ExecutorService pool =Executors.newFixedThreadPool(employeeCount);
         List<Future> results = new ArrayList<Future>(ordersCount);
         AtomicInteger doneSignal = new AtomicInteger( ordersCount);
         for(int i =0 ; i<ordersCount; i++){
            // results.add(pool.submit(new SplitWorker(doneSignal)));
//             pool.execute(new SplitWorker( doneSignal));
             results.add(pool.submit(new SplitWorker(doneSignal)));
            
         }
         for(Future f : results)  {
         System.out.println(" here-----------? "+f.get());
     }
     pool.shutdown();
     
            String dir ="D:\\a\\";
            
            String name = dir +"final.txt";
            File finalfile = new File(name);
            File file = new File(dir);
            File[] files = file.listFiles(new FilenameFilter() {
                
                public boolean accept(File dir, String name) {
//                    System.out.println(name+"             dasddddddddddddddddddddddddddddddddd");
                    if(name.endsWith("-final.txt")){
                        return true;
                    }
                    return false;
                }
            });
            Arrays.sort(files,new  Comparator<File>(){

                public int compare(File file1, File file2) {
                    // TODO Auto-generated method stub
                    String str1 = file1.getName().split("-")[0];
                    Integer n1 = new Integer(str1);
                    String str2 = file2.getName().split("-")[0];
                    Integer n2 = new Integer(str2);
                    if(n1>n2){
                        return 1;
                    }else if(n1<n2){
                        return -1;
                    }
                    return 0;
                }});
        
            FileWriter fw= null;
            BufferedWriter bw = null;
            try {
                fw = new FileWriter(finalfile, true);
                bw = new BufferedWriter(fw);
                for(File f: files){
                    System.out.println(f);
                    List<String> dataList = FileUtils.readLines(f);
                    IOUtils.writeLines(dataList, null, bw);
                    bw.flush();
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                throw new RuntimeException(e);
            } finally {
                IOUtils.closeQuietly(bw);
                IOUtils.closeQuietly(fw);
                
            }

    }

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
package sample3;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;

import org.apache.commons.io.IOUtils;

import sample1.Prodt;
import sample1.SwapProdt;

public class SplitWorker extends Thread {

    AtomicInteger doneSignal;
    int row =10;

    public SplitWorker(AtomicInteger ordersCount) {
        doneSignal = ordersCount;
    }

    @Override
    public void run() {
        printGo();
            process();

       
        printGo1();
        return;
    }

    private void process() {
        // TODO Auto-generated method stub
        // read file
        // write file
        int in = doneSignal.decrementAndGet();
        String name = "D:\\a\\" + in + "-final.txt";
        List<String> dataList = new ArrayList<String>();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        for (int i = 0; i < row; i++) {
            String str = name+"-----------"+Thread.currentThread().getName() + "  :" + df.format(new Date())
                    + "test append data:" + SwapProdt.class.getName() + ":" + i;
            dataList.add(str);
        }

        System.out.println(name);
        File file = new File(name);
   
        FileWriter fw= null;
        BufferedWriter bw = null;
        try {
            fw = new FileWriter(file, true);
            bw = new BufferedWriter(fw);
            IOUtils.writeLines(dataList, null, bw);
            bw.flush();
            System.out.println(name+"...............done");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            IOUtils.closeQuietly(bw);
            IOUtils.closeQuietly(fw);
           
        }

    }

    private static void printThreadInfo(String enterStr) {
        String workerName = Thread.currentThread().getName();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long startTime = System.currentTimeMillis();
        System.out.println(workerName + "--->" + Class.class.getSimpleName()
                + df.format(new Date()) + " " + enterStr);
    }

    private static void printGo() {
        printThreadInfo("START....");
    }

    private static void printGo1() {
        printThreadInfo("END....");
    }

}

你可能感兴趣的:(java)