如果要实现合并流,必须使用SequenceInputStream类
实例:先分割一个大于1M的文件,在将文件合并
import java.io.*;
import java.util.*;
class SplitFile{
public static void main(String[] args) throws IOException{
splitFile();//调用分割文件方法
merge();//调用整合文件方法
}
public static void merge() throws IOException{//创建合并方法
ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();//创建一个集合,用于存储合并的文件
for(int x=1;x<=3; x++){
al.add(new FileInputStream//分割后的文件逐一并添加到集合中
("F:\\黑马程序员\\JavaP\\20140925\\SplitFile\\"
+x+".Christine Welch - 寻寻觅觅.mp3.part"));
}
final Iterator<FileInputStream> it = al.iterator();//调用集合的迭代器并指定类型
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>(){//创建枚举变量
public boolean hasMoreElements(){//判断是否还有与元素存在
return it.hasNext();//返回下一个元素
}
public FileInputStream nextElement(){
return it.next();//返回下一个元素
}
};
SequenceInputStream sis = new SequenceInputStream(en);//创建序列流,将枚举变量传入
FileOutputStream fos = new FileOutputStream
("F:\\JavaP\\20140925\\SplitFile\\Christine Welch - 寻寻觅觅_copy.mp3"); //创建文件读取流并指定合并后的文件名
byte[] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf)) != -1){//判断是否达到文件结尾
fos.write(buf,0,len);//将文件写入到流中
}
fos.close();//关闭写入流
sis.close();//关闭序列刘备
}
public static void splitFile() throws IOException{ //创建分割方法
FileInputStream fis = new FileInputStream//创建读取流并加载要分割的文件
("F:\\JavaP\\20140925\\SplitFile\\Christine Welch - 寻寻觅觅.mp3");
FileOutputStream fos = null;//创建输出流引用
byte[] buf = new byte[1024*1024];//指定分割文件的大小
int len = 0;
int count = 1;
while((len=fis.read(buf)) != -1){//判断读取流是否到达最后位置
fos= new FileOutputStream//逐一分创建文件用于存储
("F:\\黑马程序员\\JavaP\\20140925\\SplitFile\\"
+(count++)+".Christine Welch - 寻寻觅觅.mp3.part");
fos.write(buf,0,len);//将分割后的文件存入分割流中
fos.close();//关闭输出流
}
if(fos != null)//判断输出流是否到达最后
fos.close();//关闭输出流
}
}
实例:先分割一个大于1M的文件,在将文件合并
import java.io.*;
import java.util.*;
class SplitFile{
public static void main(String[] args) throws IOException{
splitFile();//调用分割文件方法
merge();//调用整合文件方法
}
public static void merge() throws IOException{//创建合并方法
ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();//创建一个集合,用于存储合并的文件
for(int x=1;x<=3; x++){
al.add(new FileInputStream//分割后的文件逐一并添加到集合中
("F:\\黑马程序员\\JavaP\\20140925\\SplitFile\\"
+x+".Christine Welch - 寻寻觅觅.mp3.part"));
}
final Iterator<FileInputStream> it = al.iterator();//调用集合的迭代器并指定类型
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>(){//创建枚举变量
public boolean hasMoreElements(){//判断是否还有与元素存在
return it.hasNext();//返回下一个元素
}
public FileInputStream nextElement(){
return it.next();//返回下一个元素
}
};
SequenceInputStream sis = new SequenceInputStream(en);//创建序列流,将枚举变量传入
FileOutputStream fos = new FileOutputStream
("F:\\JavaP\\20140925\\SplitFile\\Christine Welch - 寻寻觅觅_copy.mp3"); //创建文件读取流并指定合并后的文件名
byte[] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf)) != -1){//判断是否达到文件结尾
fos.write(buf,0,len);//将文件写入到流中
}
fos.close();//关闭写入流
sis.close();//关闭序列刘备
}
public static void splitFile() throws IOException{ //创建分割方法
FileInputStream fis = new FileInputStream//创建读取流并加载要分割的文件
("F:\\JavaP\\20140925\\SplitFile\\Christine Welch - 寻寻觅觅.mp3");
FileOutputStream fos = null;//创建输出流引用
byte[] buf = new byte[1024*1024];//指定分割文件的大小
int len = 0;
int count = 1;
while((len=fis.read(buf)) != -1){//判断读取流是否到达最后位置
fos= new FileOutputStream//逐一分创建文件用于存储
("F:\\黑马程序员\\JavaP\\20140925\\SplitFile\\"
+(count++)+".Christine Welch - 寻寻觅觅.mp3.part");
fos.write(buf,0,len);//将分割后的文件存入分割流中
fos.close();//关闭输出流
}
if(fos != null)//判断输出流是否到达最后
fos.close();//关闭输出流
}
}