import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
public class Demo_04 {
public static void main(String[] args) throws IOException {
// 切割 和 合并
//切割 将一个文件 分割成多份 每一份都是一个输出流
//splitFile();
sequenceFile();
}
public static void sequenceFile() throws IOException{
File file = new File("d:\\splitFile");
File[] files = file.listFiles();//获取文件夹中所有的文件
//listFiles() 不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。
//static <T> void sort(T[] a, Comparator<? super T> c) 根据指定比较器产生的顺序对指定对象数组进行排序。
System.out.println(files.length);
ArrayList<FileInputStream> list = new ArrayList<>();
for(int i=1;i<=files.length;i++){
list.add(new FileInputStream("d:\\splitFile\\cp_("+i+").mp3")); //方式1
//list.add(new FileInputStream(files[i].getAbsolutePath())); //方式2
}
Iterator<FileInputStream> it = list.iterator();
//需要枚举 以匿名内部类的形式 获取枚举
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() {
@Override
public boolean hasMoreElements() {
boolean b = it.hasNext();
return b;
}
@Override
public FileInputStream nextElement() {
return it.next();
}
};
//序列流
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream("d:\\致青春all.mp3");//目的地
byte[] buf = new byte[1024*1024];
int len = 0;
while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
fos.flush();
}
fos.close();
sis.close();
System.out.println("success");
}
public static void splitFile()throws IOException{
//源头
File file = new File("致青春.mp3");
FileInputStream fis = new FileInputStream(file);
//目的地
File file2 = new File("d:\\splitFile");
if(!file2.exists()){
file2.mkdir();
}
byte[] buf = new byte[1024*1024];//按照1m来切割
int len = 0;
int count = 1;
FileOutputStream fos = null;
while((len = fis.read(buf))!=-1){
fos = new FileOutputStream(file2+"\\cp_("+(count++)+").mp3");
fos.write(buf, 0, len);
}
fos.close();
fis.close();
System.out.println("success");
}
}