Java 实现大文件的分割与合并

package namespace;
import java.io.*;
public class Study
{
	private  static int length=1024;//可以设置文件在读取时一次读取文件的大小 
	
	/*
	 * 文件的切割
	 * String path   切割文件的路径
	 * size      子文件的大小
	 * */
	public static void  filesplit(String path,int size)throws Exception
	{
		if(path==null)
			throw new Exception("源文件不能为空...");
		File file=new File(path);
		if(!file.exists())
			throw new Exception("源文件不存在...");
		long num=file.length()%size==0?file.length()/size:file.length()/size+1;
		String list[]=new String[(int)num];//用于存放分割后的结果
		FileInputStream reader=new FileInputStream(file);
		long beginIndex=0,endIndex=0;
		int readcount=0;byte buffer[]=new byte[length];
		for(int i=0;i<num;i++)
		{
			list[i]=file.getAbsolutePath()+".depart"+i+".rmvb";
			FileOutputStream writer=new FileOutputStream(list[i]);
			endIndex=(endIndex+size)>file.length()?file.length():endIndex+size;
			for(;beginIndex<endIndex;)
			{
				if(endIndex-beginIndex>=length) {
				 readcount=reader.read(buffer);
				 beginIndex+=readcount;
				 writer.write(buffer);
				}else {
					//下面的就不能直接读取1024个字节了,就要一个一个字节的读取了
					for(;beginIndex<endIndex;beginIndex++)
					{
						writer.write(reader.read());
					}
					continue;
				}
			}
			writer.close();
			
		}
	}
	public static void union(String path,String newString)throws Exception
	{
		File file=new File(path);
		File list[]=file.listFiles();
		File newFile=new File(newString);
		byte buffer[]=new byte[1024];
		int readcount;
		if(!newFile.getParentFile().exists())
			throw new Exception("你合并的文件夹的不存在...");
		FileOutputStream writer=new FileOutputStream(newString);
		for(File f:list)
		{
			FileInputStream reader=new FileInputStream(f);
			while((readcount=reader.read(buffer))!=-1)
			{
				writer.write(buffer);
			}
			reader.close();
		}
		writer.close();
	}
	public static void main(String args[])throws Exception
	{
     //	filesplit("F:\\movie\\movie.rmvb",104857600);
		//union("F:\\movie\\","F:\\movie.rmvb");
	}
}
/*
 * 						文件的分割与合并
 * 			1.文件的分割,原理是用输入流去读取文件,将读取规定大小的流再输出支指定的文件,直到整个把整个文件读取结束.
 * 			2.文件合并,文件的合并原理与分割正好想反,就是把所有的文件都读取到一个输入流中,然后再把输入流中的东西全部输出到
 *  				同一个文件输出流中,这样就可以把分割的文件合并到一个文件中去了. 并且文件的大小和原来也会一样 . 
 * 			3.上面的程序我试着分割一个600多M 的电影,分割是成功了,但只是分割的第一个文件可以播放,而后面的几个文件都不可以播放,我也不知道为什么,
 * 					可能是视频文件里面有什么自定的格式吧...不过分割后再把所有的文件合并,合并后文件大小和之前一样,而且还可以插入,说明文件没有分割坏
 * 					至于单个的文件为什么不能插入,这个以后用到的时候再去研究..现在还是把Java的基础搞懂再说..... 
 * 																								2011.10.21 9:43
 *  *  * 
 * 
 * 
 * */

 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值