文件的拆分與合併

文件拆分:
文件拆分與合併 - 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(); } }

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