文件的拆分与合并

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值