【I/O流】对大文件实现分割、合并处理

/**
	 * 
	 * @param commFile 需要分割的文件
	 * @param untieFile 分割后保存的文件
	 * @param filesize 分割多少个
	 */
	public void fenGe(File commFile,File untieFile,int filesize){
		FileInputStream fis=null;
		//用来指定分割文件以MB为单位
		int size =1024*1024;
		
		try {
			//如果保存分割文件地址不是路径
			if(untieFile.isDirectory()){
				//创建该路径
				untieFile.mkdirs();
			}
			size=size*filesize;
			//获取文件大小
			int length=(int)commFile.length();
			//获取文件大小除以MB的得数
			int num=length/size;
			//获取文件大小与MB相除的余数
			int yu=length % size;
			//获取保存文件的完成路径信息
			String newfengeFile=commFile.getAbsolutePath();
			int fileNew =newfengeFile.lastIndexOf(".");
			//截取字符串
			String strNew= newfengeFile.substring(fileNew,newfengeFile.length());
			//创建FileInputStream类对象
			fis=new FileInputStream(commFile);
			//创建文件数组
			File[] fl=new File[num+1];
			int begin=0;
			//循环遍历数组
			for(int i=0;i<num;i++){
				//指定分割后小文件的文件名
				fl[i]=new File(untieFile.getAbsolutePath()+"\\"+(i+1)+strNew+".tem");
				if(!fl[i].isFile()){
					//创建该文件
					fl[i].createNewFile();
				}
				FileOutputStream fos=new FileOutputStream(fl[i]);
				byte[] bl=new byte[size];
				//读取分割后的小文件
				fis.read(bl);
				//写文件
				fos.write(bl);
				begin=begin+size*1024*1024;
				//关闭流
				fos.close();
				
			}
			//文件大小与指定文件分割大小相除的余数不为0;
			if(yu !=0){
				//指定文件分割后数组中最后一个文件名
				fl[num]=new File(untieFile.getAbsolutePath()+"\\"+(num+1)+strNew+".tem");
				if(!fl[num].isFile()){
					//新建文件
					fl[num].createNewFile();
				}
				FileOutputStream fyu=new FileOutputStream(fl[num]);
				byte[] byt=new byte[yu];
				fis.read(byt);
				fyu.write(byt);
				fyu.close();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

/**
	 * 合并文件
	 * @param file 需要合并的文件
	 * @param cunDir 合并后的文件
	 * @param hz 
	 */
	public void heBing(File[] file,File cunDir, String hz){
		try {
			//指定分割后文件的文件名
			File heBingFile=new File(cunDir.getAbsoluteFile()+"\\UNTIE"+hz);
			if(!heBingFile.isFile()){
				heBingFile.createNewFile();
			}
			//创建FileOutputStream对象
			FileOutputStream fos=new FileOutputStream(heBingFile);
			//循环遍历要进行合并的文件数组对象
			for(int i=0;i<file.length;i++){
				FileInputStream fis=new FileInputStream(file[i]);
				//获取文件长度
				int len=(int)file[i].length();
				byte[]bRead=new byte[len];
				//读取文件
				fis.read(bRead);
				//写入文件
				fos.write(bRead);
				//将流关闭
				fis.close();
				
			}
			fos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

猜你喜欢

转载自blog.csdn.net/hutuyaoniexi/article/details/80630687