文件的拆分与合并

文件拆分:
文件拆分与合并 - Kitchee - Kitchee Hong
 文件拆分的实现代码:

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class SplitTest { public static void main(String[] args) { System.out.println("请输入一个“文件”路径"); String s = new Scanner(System.in).nextLine(); File f =new File(s); if(!f.isFile()){ System.out.println("请输入正确的文件路径,不是目录路径"); return; } System.out.println("请输入拆分的大小:(Kb)"); long size =new Scanner(System.in).nextLong(); size *=1024; try { split(f,size); System.out.println("文件拆分成功"); } catch (Exception e) { System.out.println("文件拆分失败"); e.printStackTrace(); } } private static void split(File f, long size) throws Exception { //原文件名 String name =f.getName(); //准备拆分文件存放的路径 File dir =new File(f.getAbsolutePath()+"_split"); if(dir.isDirectory()){ //遍历,清空里面的文件 File[] files = dir.listFiles(); for (File ff : files) { ff.delete(); } }else{ dir.mkdirs(); } //定义字节计数变量,和文件计数变量 long byteCount=0; int fileCount=0; BufferedInputStream in =new BufferedInputStream(new FileInputStream(f)); BufferedOutputStream out=null; int b ; while((b=in.read())!=-1){ //如果没有输出流,或者前一个文件满了 if(out==null || size==byteCount ){ if(out!=null){ out.close(); } out =new BufferedOutputStream(new FileOutputStream(new File(dir,name+"."+(++fileCount)))); byteCount =0; } out.write(b); byteCount++; } in.close(); out.close(); } }

文件合并:
文件拆分与合并 - Kitchee - Kitchee Hong
 
文件合并实现代码:

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class ConcatTest { public static void main(String[] args) { System.out.println("请输入拆分文件存放所在的目录"); String s =new Scanner(System.in).nextLine(); File dir =new File(s); if(!dir.isDirectory()){ System.out.println("请输入一个目录路径,不是文件路径"); return; } System.out.println("请输入目标文件"); s =new Scanner(System.in).nextLine(); File f =new File(s); if(f.isDirectory()){ System.out.println("请输入一个文件路径,不是目录"); return; } try { concat(f,dir); System.out.println("文件合并完成"); } catch (Exception e) { System.out.println("文件合并失败"); e.printStackTrace(); } } private static void concat(File f, File dir) throws Exception { //先把此目录路径下的文件过滤,找到需要合并的文件 File[] files = dir.listFiles(new FileFilter() { @Override public boolean accept(File ff) { if(ff.isDirectory()) return false; //是文件 String n =ff.getName(); int index =n.lastIndexOf("."); if(index==-1){ return false; } n=n.substring(index+1); return (n.matches("\\d+")); } }); //将所需要的文件进行排序 Arrays.sort(files , new Comparator<File>() { @Override public int compare(File o1, File o2) { String n1 =o1.getName(); String n2 =o2.getName(); n1=n1.substring(n1.lastIndexOf(".")+1); n2=n2.substring(n2.lastIndexOf(".")+1); int a =Integer.parseInt(n1); int b =Integer.parseInt(n2); return a-b; } }); //开始执行文件合并工作 BufferedInputStream in =null; BufferedOutputStream out =new BufferedOutputStream(new FileOutputStream(f)); for (File fff : files) { in =new BufferedInputStream(new FileInputStream(fff)); int b; while((b=in.read())!=-1){ out.write(b); } in.close(); } out.close(); } }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章