文件切割与合并

实现对大文件的切割与合并。
按指定个数切(如把一个文件切成10份)或按指定大小切(如每份最大不超过10M)

public class FileSplitEx {

@Test
public void split() throws IOException{
JFileChooser jfc=new JFileChooser();//文件选择框
int iSelBtn=jfc.showOpenDialog(null);
if(iSelBtn==JFileChooser.APPROVE_OPTION){//选择了
//获取用户要切割的文件
File file=jfc.getSelectedFile();
//在切割文件所在文件夹中创建一个"splitFiles"子文件夹,用于存储切割后的碎片
File desDir=new File(file.getParent(),"splitFiles");//ile.getParent()是获取file的路径,这里new的文件的文件名是file+“splitFiles”;
fileSpilit(file,desDir);
}

}




private void fileSpilit(File file, File desDir) throws IOException {//文件分割方法
if(!desDir.exists()){
desDir.mkdir();//创建文件夹
}
FileInputStream fin=new FileInputStream(file);
FileOutputStream fout=null;
byte b[]=new byte[1024*1024];
int len=0;
int count=1;
while((len=fin.read(b))!=-1){
String filename=file.getName()+(count++)+".dar";
fout=new FileOutputStream( new File(desDir,filename) );
fout.write(b,0,len);
fout.close();//一定要关流
}
fin.close();
}








@Test
public void mergeDemo() throws IOException {
//写死了----直接给出了要合并的文件
File srcDir = new File("F:\\QQ文件下载\\hncu\\huncu\\四大名著");
String filename = "四大名著【精校合集】(红+西+水+三).rar";//最后合并得到的文件
mergeFile(srcDir, filename);
}


private void mergeFile(File srcDir, String filename) throws IOException {
if(!srcDir.exists()){
System.out.println("该目录不存在");
return;
}
File[] partFiles=srcDir.listFiles();//将该目录下的所以文件放入partFiles中
if(partFiles.length==0){
System.out.println("该目录下不存在文件");
return;
}
ArrayList<FileInputStream> list=new ArrayList<FileInputStream>();
for(int i=0;i<partFiles.length;i++){
list.add(new FileInputStream( new File(srcDir,filename+(i+1)+".part") ));
}
Enumeration<FileInputStream> en=Collections.enumeration(list);//转成枚举

SequenceInputStream seq=new SequenceInputStream(en);//放入并列流

FileOutputStream fout=new FileOutputStream(new File(srcDir,filename));

byte b[] = new byte[512];
int len=0;
while((len=seq.read(b))!=-1){
fout.write(b, 0, len);
}
fout.close();
seq.close();
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值