class SplitFileDemo { public static void main(String[] args) { System.out.println("Hello World!"); } public static void splitFile(File file) { FileInputStream fis = new FileInputStream(file); byte[] buf = new byte[1024*1024]; FileOutputStream fos = null; int len = 0; int num = 1; Properties prop = new Properties(); File dir = new File("c"\\partFile"); if(!dir.exits()) dir.madirs(); while((len=fis.read(buf))!=-1) { fos = new FileOutputStream(new File(dir,num+".part")); num++; fos.write(buf,0,len); fos.close(); } prop.setProperty("partcount",count+""); prop.setProperty("filename",file.getName()); fos = new FileOutputStream(new File(dir,count+".properties")); prop.store(fos,"sava file info"); fis.close(); } } public class MergeFile { public static void mergeFile(File dir) { //获取指定目录下配置文件对象 File[] files = dir.listFiles(new SufixFilter(".properties")); if(files.length!=1) throw new RuntimeException(dir+",该目录下没有或者不唯一.properties"); //记录配置文件对象 File confile = files[0]; //获取该文件的信息 Properties prop = new Properties(); FileInputStream fis = new FileInputStream(confile); prop.load(fis); String filename = prop.getProperty("filename"); int count = Integer.parseInt(prop.getProperty("partcount")); //获取该目录下的所有碎片文件 File[] partFiles = dir.listFile(new SuffixFilter(".part")); if(partFiles.length!=(count-1)) throw new RuntimeException("碎片个数不对,应该有"+(count)+"个"); // ArrayList<FileInputStream> a1 = new ArrayList<FileInputStream>; // for(int x=1;x<=3;x++) //将碎片文件和流对象关联并存储到集合中 ArrayList<FileInputStream> a1 = new ArrayList<FileInputStream>; for(int x=0;x<partFiles.length;x++) { // a1.add(new FileInputStream(new File(dir,x+".part"))); a1.add(new FileInputStream(partFiles[x])); } //将多个流合并成一个序列流 Enueration<FileInputStream> em = Collection.enueration(a1); SequenceInputStream sis = new SequenceInputStream(em); FileOutputStream fos = new FileOutputStream(new File(dir,"1.txt")); byte[] buf = new byte[1024]; int len = 0; while((len=sis.read(buf))!=-1) { fos.write(buf,0,len); } sis.close(); fos.close(); } } public class SuffixFilter implements FilenameFilter { private String suffix; public SuffixFilter(String suffix) { super(); this.suffix = suffix; } public boolean accept(File dir,String name) { return name.endsWidth(suffix); } }