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....");
}
}
分享到:
相关推荐
此外,多线程处理也可能被用到,特别是当拆分或合并大量文件时,可以并行处理以提高整体速度。 7. **应用示例** 这个C#程序可能适用于各种场景,如备份、云存储、网络传输等。例如,将大型日志文件拆分为更小的...
综上所述,"文件的上传拆分合并"是一个涵盖网络通信、文件操作、流处理等多个核心Java编程概念的主题。UploadJPG.java和SplitFile.java可能是实现这些功能的示例代码,对于学习和理解文件处理的各个环节具有很高的...
在Android开发中,文件的合并与拆分是常见的操作,特别是在处理资源文件或者进行个性化定制时,例如换肤功能的实现。本文将深入探讨如何在Android环境中有效地进行文件的合并与拆分,以及它们在实际应用中的作用。 ...
例如,对于非常大的文件,可以使用缓冲区流以提高效率,或者使用多线程同时处理多个子文件。此外,文件操作过程中应始终检查可能出现的IOExceptions,并妥善处理。 在给定的压缩包文件"day1604_文件拆分合并"中,...
文件拆分和合并在很多场景下都有用武之地,比如: - 分割大型日志文件,便于分析或上传。 - 在分布式系统中,大文件可以被分割成多个部分,由不同的节点并行处理,提高效率。 - 数据备份,将大文件拆分成多个小文件...
### Java实现文件拆分合并 #### 一、背景与需求分析 在大数据处理场景中,经常需要对大型文件进行拆分或合并操作。例如,在分布式处理系统中,为了提高并行处理效率,需要将单个大文件拆分成多个较小的文件,以...
本项目“poi多线程大数据导出excel文件”提供了一个解决方案,利用多线程来提高Excel的大数据导出效率。 Apache POI 3.1版本是较早的版本,而项目中使用了更新的4.1版本,这意味着它可能利用了更多优化和新特性。在...
对于大型文件,可能需要使用多线程或者异步处理来提高效率。同时,为了保证数据的完整性和一致性,通常会在拆分和合并过程中添加校验和或哈希值。 总之,文件的拆分和合并是IT工作中常见的文件操作,理解其原理和...
在"NDK开发之文件拆分合并"的主题中,我们将深入探讨如何在Android环境下利用NDK进行文件的拆分与合并操作。 首先,我们要理解NDK的基本概念。NDK提供了一系列的工具,包括编译器、链接器和调试工具,用于创建原生...
1. **任务拆分**:多线程下载首先将大文件分割成多个小块,每个线程负责下载一个或多个数据块。这样,当多个线程同时工作时,可以从服务器并行获取文件的不同部分,显著提高下载速度。 2. **同步机制**:由于多个...
另外,多线程处理可以加快文件的读写速度,特别是在多核处理器的系统上。 总的来说,这个`SplitImageUtil.java`源码提供了大文件分割和合并的功能,对于开发者来说,它是一个学习和参考的实例,帮助理解如何在Java...
同时,为了提高性能,可能需要使用多线程来处理大量页面,但这增加了实现的复杂性。 总之,利用iTextPDF库,通过计算和动态调整,我们可以有效地将一个大PDF文件拆分成多个指定大小的文件,以满足特定的存储和传输...
本文将深入探讨如何在 Delphi 中利用流技术来分割和合并文件,这对于多线程、P2P 和 FTP 文件传输等场景尤其有用,比如在实现迅雷等快速文件传输工具的功能时。 首先,理解什么是流。在 Delphi 中,流是数据的抽象...
支持多线程快速合并,表越多优势越明显 Python处理大表,可处理千万条数据大表,表越大优势越明显 劣势: 需要下载安装,初次使用可能需要一定的学习时间 特色功能: 支持单表千万量级拆分 支持批量拆分 支持带...
- `threadpooltask`可能包含实现线程池管理多线程上传的示例代码,包括文件拆分、任务提交、线程池配置等。具体实现方式会涉及到IO操作、并发控制、异常处理等多个方面。 总结来说,线程池通过统一管理和复用线程...
此外,对于非常大的文件,可能需要使用多线程或异步I/O来并行处理,但这涉及到更高级的编程技巧。 总之,文件分割和合并是C++编程中的重要技能,它涉及到二进制文件的读写、文件流的使用以及对文件系统的理解。熟练...
在" .NET WebService 多线程上传 CS+BS "这个场景中,我们主要讨论的是如何利用C#(Client-side,CS)客户端通过多线程技术与B/S(Browser/Server)架构的Web服务交互,实现大文件或大量文件的高效上传。 一、Web...
本教程主要探讨的是如何利用Lucene进行索引优化,特别是通过多线程和处理多个目录来提高索引创建效率。 首先,我们需要理解Lucene的索引原理。Lucene将文档分解为词项(tokens),并对每个词项创建倒排索引。倒排...
6. 合并文件:所有部分下载完成后,将它们合并成原始文件。 在"ZZDownDemo"这个示例项目中,可能包含了实现这一功能的代码结构,包括线程池的创建、文件分割、多线程下载逻辑、进度跟踪和断点续传的恢复机制等。...