JAVA从入门到进阶(十二)——IO技术必杀技之四 文件的切割和合并

package iotest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collections;


public class IOCut {
public static void main(String[]args) throws IOException
{
	File dir=new File("D:\\Iotest");
	
	
}

private static void merry(File dir) throws IOException {
	/*
	 * 文件合并步骤
	 * ①创建一个Em集合里面把所有输入源全部封装起来
	 * ②通过序列化对象传入集合
	 * ③指定一个文件,把所有源中的数据全部写入此文件中
	 */
	ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
	
	for(int x=1;x<=6;x++)
		al.add(new FileInputStream(new File(dir,x+".part")));
	SequenceInputStream si=new SequenceInputStream(Collections.enumeration(al));
FileOutputStream fs=new FileOutputStream(new File(dir,"mermy.JPG"));
	int len;
	byte[] bf=new byte[1024];
	while((len=si.read(bf))!=-1)
	{
		fs.write(bf, 0, len);
	}
	
	
}

private static void cutfile(File file) throws IOException {
	/* 文件切割
	 * 步骤
	 * ①用读取流关联文件
	 * ②自己定义一个缓冲数组
	 * ③当缓冲数组读完后,创建新的文件在写入切割后的文件
	 */
	FileInputStream fs=new FileInputStream(file);
	byte [] bt=new byte[1024*1024];
	int len;
	int count =1;
	File dir=new File("D:\\Iotest");
	while((len=fs.read(bt))!=-1)
	{
	   FileOutputStream fs1=new FileOutputStream(new File(dir,(count++)+".part"));
	   fs1.write(bt, 0, len);
	}
	
	
}
}

注意:
1.在创建文件输入输出流对象的时候可以直接传文件对象。文件对象可以传目录,和要操作的文件名。
2.在文件切割时,步骤
①用读取流(文件输入流)关联指定文件
②可以自定义大小的一个缓冲数组
③文件切割时需要分成多个文件,而我们知道的一个流只能关联一个文件,所以我们在一次读完数组后,要创建一个文件输入流和文件名相关联
④通过文件输出流中在文件中写入数据
3.在文件合并时,步骤
①因为在文件合并时,有多个文件要进行合并,每个文件对应一个流,所以有很多个文件输出流。这时我们用SequenceInputStream 。
②SequenceInputStream接受的是 Enumeration对象,我们可以用Collections.enumeration()来实现。
③定义一个缓冲数组,通过获取SequenceInputStream的read(byte[]b)方法返回的字节数len,创建一个输出流对象写入数组(从0到len)。

猜你喜欢

转载自blog.csdn.net/weixin_43752167/article/details/87887271
今日推荐