文件分割与合并 类
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);
// }
}