java IO分割流和合并流

package com.io.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;

/**
 * @类功能说明: 将一个MP3文件切割成1M大小的多等分,然后在合并一起
 * @类修改者:
 * @修改日期:
 * @修改说明:
 * @作者:matieli
 * @创建时间:Apr 25, 2012 9:28:40 PM
 * @版本:V1.0
 * 
 */
public class SplitFile {
	public static void main(String[] args) throws IOException {
		// splitMp3();
		SequenceMp3();
	}

	/**
	 * @方法功能说明:
	 * @修改者名字:matieli
	 * @修改时间:Apr 25, 2012 9:48:37 PM
	 * @修改内容:
	 * @参数:@throws IOException
	 * @return:void
	 * @throws
	 */
	public static void SequenceMp3() throws IOException {
		// 切割完成后,在合并流
		File f = new File("splitfiles");
		File[] fs = f.listFiles();// 获得文件的长度
		ArrayList<FileInputStream> list = new ArrayList<FileInputStream>();
		for (int i = 0; i < fs.length; i++) {
			list.add(new FileInputStream(fs[i]));// 遍历文件对象数组
		}
		final Iterator<FileInputStream> it = list.iterator();
		// 使用匿名内部类,创建枚举
		Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() {

			public boolean hasMoreElements() {
				return it.hasNext();
			}

			public FileInputStream nextElement() {
				return it.next();
			}

		};
		// 创建合并流
		SequenceInputStream sis = new SequenceInputStream(en);

		// 指定合并流输出到哪里
		FileOutputStream fos = new FileOutputStream("splitfiles//2.mp3");

		byte[] b = new byte[1024 * 1024];
		int len = 0;
		while ((len = sis.read(b)) != -1) {
			fos.write(b, 0, len);
			fos.flush();
		}
		fos.close();
		sis.close();

	}

	/**
	 * @方法功能说明:把目标文件切成1M大小的不等份,最后一个剩下多少就放多少
	 * @修改者名字:matieli
	 * @修改时间:Apr 25, 2012 9:47:42 PM
	 * @修改内容:
	 * @参数:@throws IOException
	 * @return:void
	 * @throws
	 */
	public static void splitMp3() throws IOException {
		FileInputStream fis = new FileInputStream("1.mp3");
		FileOutputStream fos = null;
		byte[] b = new byte[1024 * 1024];// 定义一个1M大小的数组
		int len = 0;
		int count = 0;
		while ((len = fis.read(b)) != -1) {
			fos = new FileOutputStream("splitfiles//" + (count++) + ".part");
			fos.write(b, 0, len);
			fos.close();
		}
		fis.close();
	}
}

猜你喜欢

转载自matieli.iteye.com/blog/1499399
今日推荐