24-IO流-52-IO流(文件切割)

/*
 * 【需求】将一个文件进行切割。
 * (切割有两种方式:按大小切,即每份规定多大,切几份不管;按数量切,即等分成几份,每份多大不管)
 * 
 * 【思路】(假设希望切割成大小为1M的子文件)
 * 对于源文件,用一个读取流不停读取,一边读一边向第一个子文件写,直到读满1M,之后继续读取,往第二个子文件写,直到读满1M,
 * 以此类推。【注意:一个流只能关联一个源或目的】这个例子中,源文件唯一,只需要一个流关联,目的文件有多个,那么需要多个流
 * 关联。
 */


package demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CutFileDemo {

	private static final int SIZE = 1048576;//1048576=1024*1024

	public static void main(String[] args) throws IOException {

		File file = new File("D:\\Java-Eclipse-PersonalFile\\vedio23.IO.52\\0.mp3");
		spiltFileDemo(file);
	}

	public static void spiltFileDemo(File file) throws IOException {
		
		//用读取流关联源文件(操作源:InputStream和Reader,是否纯文本?不知道,保险起见,用字节流,且操作File对象)
		
		FileInputStream fis = new FileInputStream(file);
		
		//目标是按照1M大小切割,所以定义一个1M大小的缓冲区(1M=1024byte*1024)
		
		byte[] buf = new byte[SIZE];
		
		//创建目的
		
		FileOutputStream fos = null;
		
		int len = 0;//变量len用来记录每次读取往缓冲区buf里面装了多少个元素
		
		File dir = new File("D:\\Java-Eclipse-PersonalFile\\vedio23.IO.52");//直接明确切割后的文件存放路径
		
		if(!dir.exists())
			dir.mkdirs();//如果dir不存在,那就新建一个,管你是是单级目录还是多级目录,直接用mkdirs创建多级目录
		
		int count = 1;
		
		while((len = fis.read(buf))!=-1){
			
			fos = new FileOutputStream(new File(dir,(count++)+".part"));
//扩展名为part是为了好标识,new File(dir,(count++)+".part")是在dir目录下新建count.part文件
			
			fos.write(buf,0,len);
			fos.close();
			
		}
		
		
		fis.close();
		
		
	}

}

/*
 * 【运行结果】
 * 在dir目录下,成功将0.mp3文件(5.14M)切割成6个子文件,分别为1.part到6.part,其中前5个大小为1M,第6个大小为150KB
 */
//注意,在实际开发中,一般由用户指定SIZE,即切割大小,所以要做健壮性判断(如果5M文件切成每个1KB文件,那么子文件数量过大)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值