import java.util.*;
import java.io.*;
class CombFileDemo
{
public static void main(String[] args) throwsIOException
{
//combFile_Vector();
String path ="splitFile\\";
String ansName = "Adele-SomeoneLike You.mp3";
String ansFilter = ".spl";
splitFile(path, ansName,".spl");
String tagName ="Adele-Someone Like You(comb).mp3";
int splitCnt = 5;
combFile_ArrayList(path,tagName, ansFilter, splitCnt);
}
public static void combFile_Vector() throwsIOException
{
FileInputStream fis1 = newFileInputStream("1.txt");
FileInputStream fis2 = newFileInputStream("2.txt");
FileInputStream fis3 = newFileInputStream("3.txt");
//用Vector是因为它有一个方法可以直接返回枚举类型.elements(),但是效率低.
Vector<FileInputStream>v = newVector<FileInputStream>();
v.add(fis1);
v.add(fis2);
v.add(fis3);
Enumeration<FileInputStream> er =v.elements();
SequenceInputStream sis = newSequenceInputStream(er); //构造函数结构枚举类型的参数.
FileOutputStream fos = newFileOutputStream("123.txt");
byte [] buf = newbyte[1024];
int num = 0;
while((num = sis.read(buf)) !=-1)
{
fos.write(buf,0, num);
}
sis.close(); //关掉关联的三个流.
fos.close();
}
public static void combFile_ArrayList(Stringpath, String tagName, String ansFilter, int cnt) throwsIOException
{
ArrayList<FileInputStream>al = newArrayList<FileInputStream>();
for (int x = 1; x<=cnt; x++)
{
al.add(newFileInputStream(path + x+ansFilter)); //在合并的文件名有规律的情况下.
}
final Iterator<FileInputStream> it =al.iterator();
//自定义一个枚举类型
Enumeration<FileInputStream> er = newEnumeration <FileInputStream>()
{
publicboolean hasMoreElements()
{
returnit.hasNext();
}
publicFileInputStream nextElement()
{
returnit.next();
}
};
SequenceInputStream sis =new SequenceInputStream(er); //构造函数结构枚举类型的参数.
FileOutputStream fos = newFileOutputStream(path +tagName);
byte [] buf = newbyte[1024];
int num = 0;
while((num = sis.read(buf)) !=-1)
{
fos.write(buf,0, num);
}
sis.close(); //关掉关联的三个流.
fos.close();
}
//切割文件
public static void splitFile(String path, StringfileName, String filter) throws IOException
{
FileInputStream fis = newFileInputStream(path + fileName);
byte[] b = newbyte[1024*1024]; //按照1M的大小进行切割.
FileOutputStream fos =null;
int num = 0;
int len = 0;
while ((len = fis.read(b)) !=-1)
{
fos = newFileOutputStream(path + (++num)+filter);
fos.write(b,0, len);
fos.close();
}
fis.close();
}
}