Java合并流实现简单的文件合并示例

版权声明:LemonSnm https://blog.csdn.net/LemonSnm/article/details/89874182

合并流:

SequenceInputStream: 

表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,以此类推,知道到达包含的最后一个输入流的文件末尾为止。 

 代码示例:

package com.lemon;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;

/**
 * 文件合并:
 * 
 * @author lemonSun
 *
 *         2019年5月6日上午9:17:39
 */
public class FileDivisionMergeDemo {

	public static void main(String[] args) {


		// 合并
		try {
			InputStream in1 = new FileInputStream(new File("F:\\javatest\\1-temp123.mp4"));
			InputStream in2 = new FileInputStream(new File("F:\\javatest\\2-temp123.mp4"));
			InputStream in3 = new FileInputStream(new File("F:\\javatest\\3-temp123.mp4"));
			InputStream in4 = new FileInputStream(new File("F:\\javatest\\4-temp123.mp4"));

			Vector<InputStream> v = new Vector<InputStream>();
			v.add(in1);
			v.add(in2);
			v.add(in3);
			v.add(in4);
			Enumeration<InputStream> es = v.elements();

			// 合并
			merge(es, "F:\\javatest\\测试合并123.mp4");

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}

	}


	/*
	 * 文件合并
	 */
	private static void merge(Enumeration<InputStream> es, String mergeFile) {

		try {
			// 合并流 输入
			SequenceInputStream sis = new SequenceInputStream(es);
			// 缓冲流 输出
			BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(mergeFile));
			byte[] bytes = new byte[1024];
			int len = -1;
			while ((len = sis.read(bytes)) != -1) {
				out.write(bytes, 0, len);
				out.flush();
			}
			out.close();
			sis.close();
			System.out.println("合并完成");

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

猜你喜欢

转载自blog.csdn.net/LemonSnm/article/details/89874182
今日推荐