public class SequenceAndSplitFile {

	private static Scanner in;
	public static void main(String[] args) throws Exception {
		MergeFile();
//		SplitFile();
	}
	//文件 合并   将需要合并的文件放到 MergeFile文件夹下  
	public static void MergeFile() throws Exception{
		System.out.println("提示:请将需要合并的文件放到该路径下:F:\\0123\\文件合并与切割\\Split:");
		File dir = new File("F:\\0123\\文件合并与切割\\Split");
		System.out.println("请输入,您想合并成的文件名及文件名类型:(union.txt)");
		in = new Scanner(System.in);
		String fileName = in.nextLine();
		File mergeFile = new File("F:\\0123\\文件合并与切割\\Merge",fileName);
		FileOutputStream out = new FileOutputStream(mergeFile);
		ArrayList<InputStream> list = new ArrayList<InputStream>();
		//将 文件夹下的所有文件关联字节输入流 然后 将输入流 添加到ArrayList集合中
		File[] files = dir.listFiles();
		for (File file : files) {
			InputStream ins = new FileInputStream(file);
			list.add(ins);
		}
		System.out.println("一个有"+files.length+"个小文件。");
		final Iterator<InputStream> it = list.iterator();
		Enumeration<InputStream> e = new Enumeration<InputStream>(){
			@Override
			public boolean hasMoreElements() {
				return it.hasNext();
			}
			@Override
			public InputStream nextElement() {
				return it.next();
			}
		};//语句的分号 不要漏掉 
		
		@SuppressWarnings("resource")
		SequenceInputStream sin = new SequenceInputStream(e);
		byte[] buf = new byte[1024];
		int len = 0;
		while ((len = sin.read(buf))!=-1) {
			out.write(buf,0,len);
		}
		out.close();
		System.out.println("合并完成!!");
		System.out.println("是否需要删除源文件??Y:是——————N:否");
		String chioese = in.nextLine();
		if(chioese.equalsIgnoreCase("Y")){
			for (File file : files) {
				file.delete();
			}
			System.out.println("源文件删除完毕!!");
		}
	}
	public static void SplitFile() throws Exception{
		System.out.println("提示:请将需要切割的文件放到该路径下:F:\\0123\\文件合并与切割\\Merge:请先将该文件夹下的多余文件清空");
		File dir = new File("F:\\0123\\文件合并与切割\\Merge");
		System.out.println("请输入,您想切割成的单个文件的大小,,单位M");
		in = new Scanner(System.in);
		int size = in.nextInt();
		File[] files = dir.listFiles();
		InputStream ins = new FileInputStream(files[0]);
		String path = "F:\\0123\\文件合并与切割\\Split\\";
		OutputStream out = new FileOutputStream(path+"1.part");
		byte[] buf =  new byte[size*size];
		int len = 0;
		int count = 0;
		int num = 1;
		long start = System.currentTimeMillis();
		while ((len = ins.read(buf))!=-1) {
			count++;
			out.write(buf,0,len);
			if(count==100){
				out = new FileOutputStream(path+(++num)+".part");
				count = 0;
			}
		}
		out.close();
		long end = System.currentTimeMillis();
		System.out.println("文件切割完成!耗时:"+(end-start)+"毫秒");
	}
}