JAVA学习之文件分割

本文介绍了一个简单的Java程序,用于将大型文件分割成多个较小的部分,并提供了重新组合这些部分以恢复原始文件的功能。程序使用了缓冲输入输出流来提高读写效率。
package com.jd.MoLiyingDemo;


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.io.InputStream;
import java.io.OutputStream;


public class FileSplit {










/**
* 文件分割,把一份文件分割成几份
* 文件合并,把几份文件合成一份,然后存到一个路径下
*/
public static void main(String[] args) {
fileSplit(new File("E:\\迅雷下载\\王牌贱谍.rmvb"), 3);
//merge(3, new File("E:\\迅雷下载\\王牌贱谍.rmvb"), new File(""));
}


/**
* @param file 要拆分的文件
* @param num 拆成几份。。。
*/
public static void fileSplit(File file,int num){




try {
long l = file.length();
System.out.println(l);
InputStream  is=new FileInputStream(file);
BufferedInputStream bis=null;


for(int i=1;i<=num;i++){
bis=new BufferedInputStream(is);
StringBuilder sb = new StringBuilder();
sb.append(file.getParent()).append("\\")
.append(file.getName()).append("_part").append(i)
.append(".rmvb");
System.out.println(sb.toString());


File newFile=new File(sb.toString());//存放新拆分的文件
OutputStream os=new FileOutputStream(newFile);
BufferedOutputStream bos=new BufferedOutputStream(os);

byte[] bs=new byte[1024*1024*10];
int len=-1;
while((len=bis.read(bs))!=-1){
bos.write(bs, 0, len);
if(newFile.length()>(l/num)){
break;
}
}
bos.close();
}


bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}




}


/**
* @param num 合并几个文件
* @param path 合并到哪去
*/
public static void merge(int num,File oldPath,File newPath){

for(int i=1;i<=num;i++){
StringBuilder sb=new StringBuilder();
sb.append(oldPath.getParent()).append("\\").append(oldPath.getName()+i);
System.out.println(sb.toString());
String old = sb.toString();
try {
InputStream is=new FileInputStream(old);
BufferedInputStream bis=new BufferedInputStream(is);

File f=new File(newPath+oldPath.getName());
System.out.println(f.toString());
OutputStream os=new FileOutputStream(f);
BufferedOutputStream bos=new BufferedOutputStream(os);
byte[] bs=new byte[1024*1024*10];
int len=-1;
while((len=bis.read(bs))!=-1){
bos.write(bs, 0, len);
}
bos.close();
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值