`
wentise
  • 浏览: 23233 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

多线程拆分,合并文件

阅读更多
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....");
    }

}
分享到:
评论

相关推荐

    C#拆分和合并文件例程

    此外,多线程处理也可能被用到,特别是当拆分或合并大量文件时,可以并行处理以提高整体速度。 7. **应用示例** 这个C#程序可能适用于各种场景,如备份、云存储、网络传输等。例如,将大型日志文件拆分为更小的...

    文件的上传拆分合并

    综上所述,"文件的上传拆分合并"是一个涵盖网络通信、文件操作、流处理等多个核心Java编程概念的主题。UploadJPG.java和SplitFile.java可能是实现这些功能的示例代码,对于学习和理解文件处理的各个环节具有很高的...

    android文件的合并与拆分

    在Android开发中,文件的合并与拆分是常见的操作,特别是在处理资源文件或者进行个性化定制时,例如换肤功能的实现。本文将深入探讨如何在Android环境中有效地进行文件的合并与拆分,以及它们在实际应用中的作用。 ...

    java_文件拆分合并

    例如,对于非常大的文件,可以使用缓冲区流以提高效率,或者使用多线程同时处理多个子文件。此外,文件操作过程中应始终检查可能出现的IOExceptions,并妥善处理。 在给定的压缩包文件"day1604_文件拆分合并"中,...

    java拆分与合并02

    文件拆分和合并在很多场景下都有用武之地,比如: - 分割大型日志文件,便于分析或上传。 - 在分布式系统中,大文件可以被分割成多个部分,由不同的节点并行处理,提高效率。 - 数据备份,将大文件拆分成多个小文件...

    Java实现文件拆分合并

    ### Java实现文件拆分合并 #### 一、背景与需求分析 在大数据处理场景中,经常需要对大型文件进行拆分或合并操作。例如,在分布式处理系统中,为了提高并行处理效率,需要将单个大文件拆分成多个较小的文件,以...

    poi多线程大数据导出excel文件.zip

    本项目“poi多线程大数据导出excel文件”提供了一个解决方案,利用多线程来提高Excel的大数据导出效率。 Apache POI 3.1版本是较早的版本,而项目中使用了更新的4.1版本,这意味着它可能利用了更多优化和新特性。在...

    文件的拆分和合并

    对于大型文件,可能需要使用多线程或者异步处理来提高效率。同时,为了保证数据的完整性和一致性,通常会在拆分和合并过程中添加校验和或哈希值。 总之,文件的拆分和合并是IT工作中常见的文件操作,理解其原理和...

    NDK开发之文件拆分合并

    在"NDK开发之文件拆分合并"的主题中,我们将深入探讨如何在Android环境下利用NDK进行文件的拆分与合并操作。 首先,我们要理解NDK的基本概念。NDK提供了一系列的工具,包括编译器、链接器和调试工具,用于创建原生...

    多线程下载文件

    1. **任务拆分**:多线程下载首先将大文件分割成多个小块,每个线程负责下载一个或多个数据块。这样,当多个线程同时工作时,可以从服务器并行获取文件的不同部分,显著提高下载速度。 2. **同步机制**:由于多个...

    将大文件分割及合并java源码

    另外,多线程处理可以加快文件的读写速度,特别是在多核处理器的系统上。 总的来说,这个`SplitImageUtil.java`源码提供了大文件分割和合并的功能,对于开发者来说,它是一个学习和参考的实例,帮助理解如何在Java...

    使用itextpdf将PDF大文件拆分成若干份指定大小文件.zip

    同时,为了提高性能,可能需要使用多线程来处理大量页面,但这增加了实现的复杂性。 总之,利用iTextPDF库,通过计算和动态调整,我们可以有效地将一个大PDF文件拆分成多个指定大小的文件,以满足特定的存储和传输...

    Delphi 利用流分割与合并文件

    本文将深入探讨如何在 Delphi 中利用流技术来分割和合并文件,这对于多线程、P2P 和 FTP 文件传输等场景尤其有用,比如在实现迅雷等快速文件传输工具的功能时。 首先,理解什么是流。在 Delphi 中,流是数据的抽象...

    csv拆分-大文件大数据大表格千万级数据批量拆分分割工具

    支持多线程快速合并,表越多优势越明显 Python处理大表,可处理千万条数据大表,表越大优势越明显 劣势: 需要下载安装,初次使用可能需要一定的学习时间 特色功能: 支持单表千万量级拆分 支持批量拆分 支持带...

    线程池管理多线程上传

    - `threadpooltask`可能包含实现线程池管理多线程上传的示例代码,包括文件拆分、任务提交、线程池配置等。具体实现方式会涉及到IO操作、并发控制、异常处理等多个方面。 总结来说,线程池通过统一管理和复用线程...

    文件分割和合并——c++编程

    此外,对于非常大的文件,可能需要使用多线程或异步I/O来并行处理,但这涉及到更高级的编程技巧。 总之,文件分割和合并是C++编程中的重要技能,它涉及到二进制文件的读写、文件流的使用以及对文件系统的理解。熟练...

    .net webservice多线程上传 cs+bs

    在" .NET WebService 多线程上传 CS+BS "这个场景中,我们主要讨论的是如何利用C#(Client-side,CS)客户端通过多线程技术与B/S(Browser/Server)架构的Web服务交互,实现大文件或大量文件的高效上传。 一、Web...

    lucene索引优化多线程多目录创建索引

    本教程主要探讨的是如何利用Lucene进行索引优化,特别是通过多线程和处理多个目录来提高索引创建效率。 首先,我们需要理解Lucene的索引原理。Lucene将文档分解为词项(tokens),并对每个词项创建倒排索引。倒排...

    多文件多线程断点下载

    6. 合并文件:所有部分下载完成后,将它们合并成原始文件。 在"ZZDownDemo"这个示例项目中,可能包含了实现这一功能的代码结构,包括线程池的创建、文件分割、多线程下载逻辑、进度跟踪和断点续传的恢复机制等。...

Global site tag (gtag.js) - Google Analytics