在项目中在一个文件目录中存放多个临时文件合并文件功能的,提供代码以供交流,如有不同意见一起商议,希望各位大牛提出更好的意见和建议.再次表示感谢.
- package easyway.tbs.file.transport.core.combine;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.List;
- import org.apache.commons.io.FileUtils;
- import org.apache.commons.io.FilenameUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- * 文件合并器
- * 1.首先将根据消息中线程数,过滤目录文件数目等于线程数表示文件下载完毕。
- * 2.开始合并临时文件为一个文件。
- *
- * @author longgangbai
- *
- */
- public class FileCombineFetch extends Thread {
- private static final transient Logger LOG = LoggerFactory.getLogger(FileCombineFetch.class);
- /**
- * 目标文件的名称
- */
- private File targetFile;
- /**
- * 临时文件的目录
- */
- private Collection<File> tmpFiles;
- /**
- * 将需要合并的文件合并为一个文件
- *
- * @param targetFile
- * 需要生成的目标文件
- * @param tmpFiles
- * 临时文件的集合
- */
- public FileCombineFetch(String targetFile,Collection<File> tmpFiles){
- this.targetFile=new File(targetFile);
- this.tmpFiles=tmpFiles;
- }
- /**
- * 执行合并文件的线程方法
- *
- */
- public void run(){
- BufferedOutputStream outputStream=null;
- try {
- //创建读取文件流的目录
- outputStream = new BufferedOutputStream(new FileOutputStream(targetFile));
- List<File> fileList=new ArrayList<File>();
- fileList.addAll(fileList);
- // Collections.sort(fileList,new Comparator<File>(){
- // public int compare(File file0, File file1) {
- //
- // String fileIndex0=FilenameUtils.getBaseName(file0.getName()).split("_")[2];
- // String fileIndex1=FilenameUtils.getBaseName(file1.getName()).split("_")[2];