黑马程序员————IO流简单应用:分隔文件、合并文件

时间:2022-03-21 21:37:05
------ www.itheima.com   Java培训、Android培训、iOS培训、.Net培训期待与您交流! -------

本文主要应用javaIO中字节流,将源文件分割成每份1M,也可以反过来将分割后的文件合并成新的文件(与源文件相同)。

源码如下:
/**
 * 分割、合并文件
 * @author Smilexs
 */
public class DivideFile {
	private static final int SIZE = 1024*1024;//每部分的文件大小==1M
	
	public static void main(String[] args) {
		String oriFilePath="F:\\Home.mp3";//原文件
		String distDirPath="F:\\Part";//分割文件存放的文件夹
		divideFile(oriFilePath,distDirPath);
		mergeFile(distDirPath, "F:\\home2.mp3");//合并后的新文件
	}
	/**
	 * 对文件进行分割
	 * @param oriFilePath--原文件位置
	 * @param distDirPath--目的文件夹位置
	 */
	public static void divideFile(String oriFilePath,String distDirPath){
		/**1、简单异常处理*/
		if(oriFilePath==null || distDirPath==null){
			System.err.println("参数异常");
			return;
		}
		File oriFile = new File(oriFilePath);
		File distDir = new File(distDirPath);
		if(!oriFile.exists() || oriFile.length() < 1024 || distDir.isFile()){
			return;//文件不存在,文件大小过小,目的不是文件夹都直接返回
		}
		if(!distDir.exists()){
			distDir.mkdir();//创建文件夹
		}
		try {
			/**2、读取文件*/
			FileInputStream fis = new FileInputStream(oriFile);
			byte[] data = new byte[SIZE];//每部分的文件大小==1M
			int count =1;//标记第几部分的文件
			int len = 0;
			while((len=fis.read(data))!=-1){
				/**3、写文件*/
				FileOutputStream fos = new FileOutputStream(distDirPath+"\\part_"+count+".txt");
				fos.write(data,0,len);
				fos.flush();
				fos.close();
				count++;
			}
			System.out.println("分割完成");
			fis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 合并文件
	 * @param oriDirPath--源 分割的文件所在的文件夹路径
	 * @param distFilePath --合成的目的文件
	 */
	public static void mergeFile(String oriDirPath,String distFilePath){
		/**1、简单异常处理*/
		//略!!
		
		try {
			/**2、读文件*/
			int count=1;
			File tempFile =new File(oriDirPath+"\\part_"+count+".txt");
			//有文件存在就合并进去
			while(tempFile.exists()){
				FileInputStream fis = new FileInputStream(tempFile);
				byte[] data = new byte[SIZE];//每部分的文件大小==1M
				int len =fis.read(data);
				/**3、写文件*/
				FileOutputStream  fos = new FileOutputStream(distFilePath,true);
				fos.write(data, 0, len);
				fos.flush();
				fos.close();
				fis.close();
				count++;
				tempFile =new File(oriDirPath+"\\part_"+count+".txt");
			}
			System.out.println("合并完成");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}