文件分割与合并

文件分割与合并 类
package com.test0722;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;

public class FileSpliteDemo {

	private static final long N = 4;
//	private File sourceFile = null;
//	String path = "E:"+File.separator+"电影"+File.separator + "[阳光电影www.ygdy8.com].小姐诱心.BD.720p.国粤双语中字.mkv";
//	private FilenameFilter filter;
	
	

	/**
	 * 
	 * @param sourceFile 源文件--->需要被分割的文件
	 * @param targetFilePath 分割文件以及配置文件 存放的目录
	 * @throws IOException 
	 */
	public void spliteFileAndCreatINIFile(File sourceFile,File targetFilePath) throws IOException {
		BufferedInputStream bis = 
				new BufferedInputStream(new FileInputStream(sourceFile));
		
		FileWriter fw = new FileWriter(new File(targetFilePath, "peizhi.ini"));
		fw.write(sourceFile.getParent()+"\r\n");
		//每个部分文件的大小
		long everyPartSize = (int) (sourceFile.length() / N);
		byte[] buff = new byte[1024];
		int len = 0;
		int i = 0;
		File targetFile = new File(targetFilePath, sourceFile.getName()+"part"+ i);;
		BufferedOutputStream bos = new BufferedOutputStream(
				new FileOutputStream(targetFile));;
		fw.write(targetFile.getName()+"\r\n");		
			
		while((len = bis.read(buff)) != -1){
			
			bos.write(buff, 0, len);
			if(targetFile.length() >= everyPartSize){
				bos.flush();//在bos输出流被重新定向之前 必须  要flush缓冲区,不然可能会丢失字节
				targetFile = new File(targetFilePath, sourceFile.getName()+"part"+ ++i);
				bos = new BufferedOutputStream(
						new FileOutputStream(targetFile));;
				fw.write(targetFile.getName()+"\r\n");
			}
		}
		
		bis.close();
		
		bos.flush();
		bos.close();
		
		fw.flush();
		fw.close();
		
	}


<span style="white-space:pre">	</span>/*
<span style="white-space:pre">	</span> *<span style="white-space:pre">	</span>根据配置文件  合并  被分割的文件  并且删除配置文件以及分割文件
<span style="white-space:pre">	</span> */
	public void combineFileAndDeleteINI(File file) throws IOException {
		
		Vector<InputStream> inputVerctor = new Vector<InputStream>();
		List<File> partFileList = new ArrayList<File>();
		
		BufferedReader bis = new BufferedReader(new FileReader(file));
		String line = "";
		//读取配置文件
		System.out.println("源文件的目录---->"+bis.readLine());
		
		while((line = bis.readLine()) != null){
			File partFile = new File(file.getParentFile(), line);
			partFileList.add(partFile);
			FileInputStream fis  = new FileInputStream(partFile);
			inputVerctor.add(fis);
		}
		//合并part文件
		Enumeration<InputStream> enumeration = inputVerctor.elements();
		SequenceInputStream sequenceInputStream = new SequenceInputStream(enumeration);
		byte[] buff = new byte[1024];
		int len = 0;
		FileOutputStream fos = new FileOutputStream(file.getParent()+File.separator+"小姐诱心.mkv");
		while((len = sequenceInputStream.read(buff)) != -1){
			fos.write(buff, 0, len);
		}
		
		bis.close();
		sequenceInputStream.close();
		fos.flush();
		fos.close();
		
		//删除配置文件  删除partFile文件,需要在关闭操作这些文件的流 之后才能 删除成功,不然删除失败
		boolean delete = file.delete();
		System.out.println("删除配置文件是否成功---->"+delete);
		for(File partFile : partFileList){
			partFile.delete();
		}
	}



//	public FileSpliteDemo(String path) {
//		sourceFile = new  File(path);
//	}

	
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值