- package y12.m12.d27;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.SequenceInputStream;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Enumeration;
- import java.util.Properties;
- public class MergeFile {
- private static final int SIZE = 1048576;
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- // TODO 自动生成的方法存根
- //要合并的文件夹
- File dir=new File("d:\\partfiles");
- mergeFile(dir);
- }
- private static void mergeFile(File dir) throws IOException {
- // TODO 自动生成的方法存根
- //读取配置文件
- File[] files=dir.listFiles(new SuffixFilter(".properties"));
- if(files.length!=1)
- {
- throw new RuntimeException(dir+",给目录下没有properties文件或者文件不唯一");
- }
- //原则上只有一个配置文件
- File configfile=files[0];
- Properties prop=new Properties();
- //关联配置文件
- FileInputStream fis=new FileInputStream(configfile);
- //加载
- prop.load(fis);
- //读取值和键
- String filename=prop.getProperty("filename");
- int count=Integer.parseInt(prop.getProperty("partcount"));
- //用过滤器选择指定的文件
- File[] partFiles=dir.listFiles(new SuffixFilter(".part"));
- //碎片文件的个数是总数减去配置文件数,也就是 ”总数-1“
- if(partFiles.length!=(count-1))
- {
- throw new RuntimeException("碎片文件 不符合要求,个数不对!应该是"+count+"个");
- }
-
- //定义集合
- ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
- //为什么用count会抛异常
- for(int x=0;x<partFiles.length;x++)
- {
- //添加碎片文件到集合
- al.add(new FileInputStream(partFiles[x]));
- }
-
- Enumeration<FileInputStream> en=Collections.enumeration(al);
- //序列流
- SequenceInputStream sis=new SequenceInputStream(en);
- //指定输出的路径和名字
- FileOutputStream fos=new FileOutputStream(new File(dir,filename));
- //写
- int len=0;
- byte[] buf=new byte[SIZE];
- while((len=sis.read(buf))!=-1)
- {
- fos.write(buf,0,len);
- }
- fos.close();
- sis.close();
- }
- }
复制代码 把x<partFiles.length换成x<count 为什么会抛异常,我记得老师说可以换的 |