文件的切割,其实就是将输入流读取的数据用多个输出流输出到不同的文件中
文件的合并,就是用SequenceInputStream 对象将多个输入流串联成一个输入流,再将读取的数据通过输出流输出到指定文件中
简单的例子如下:例子中的路径可以改变,在这里,我把路径写死了。
文件的切割和合并简单实例:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
/**
*
* 文件的切割和合并
* */
public class SplitMergeFile {
// 定义文件的切割方法
public void splitFile(File file) throws IOException {
// 定义字节输入流对象
InputStream ins = new FileInputStream(file);
// 定义一个字节输出流对象
OutputStream os = null;
// 定义一个字节数组,数组的大小可变,此次字节数组大小为1M
byte[] buf = new byte[1024 * 1024];
// 定义一个变量,用于区分切割的文件名
int count = 0;
// 定义一个int类型变量,用于记录读入到字节数组的总字节数
int len = 0;
while ((len = ins.read(buf)) != -1) {
// 每次都创建一个OutputStream对象
os = new FileOutputStream("temp/" +(count++) + ".part");
os.write(buf, 0, len);
os.close();
}
ins.close();
}
//定义一个文件合并的方法
public void mergeFile() throws IOException{
//定义一个List集合,用于存放InputStream对象
List<InputStream> list = new ArrayList<InputStream>();
//根据切割的文件多少,创建多少个InputStream对象
File file = new File("temp");
String[] lf = file.list();
for(int i = 0; i< lf.length; i++){
list.add(new FileInputStream("temp/"+i+".part"));
}
//根据Iterator创建Enumeration对象
final Iterator<InputStream> iterator = list.iterator();
Enumeration<InputStream> enumeration = new Enumeration<InputStream>(){ //这是使用了匿名内部类,即使用了 Enumeration的匿名实现类
@Override
public boolean hasMoreElements() {
return iterator.hasNext();
}
@Override
public InputStream nextElement() {
return iterator.next();
}
};
//创建SequenceInputStream 对象
SequenceInputStream sis = new SequenceInputStream (enumeration);
//创建OutputStream对象
OutputStream os = new FileOutputStream("temp/DJ.mp3");
// 定义一个字节数组,数组的大小可变,此次字节数组大小为1M
byte[] buf = new byte[1024 * 1024];
// 定义一个int类型变量,用于记录读入到字节数组的总字节数
int len = 0;
while((len = sis.read(buf))!=-1){
os.write(buf,0,len);
}
os.close();
sis.close();
}
}
测试代码:
import java.io.File;
import java.io.IOException;
public class SplitMergeFileDemo {
public static void main(String[] args) throws IOException {
SplitMergeFile smf = new SplitMergeFile();
File file = new File("d:/song/DJ.mp3");
smf.splitFile(file);
smf.mergeFile();
}
}