需求:将MP3文件切割成n份,再合并
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;
import java.io.IOException;
public class Demo3 {
public static void main(String[] args) throws IOException{
cutFile();
mergeFile();
}
//切割mp3文件
public static void cutFile() throws IOException{
File file=new File("F:\\test\\童年.mp3");
//目标文件夹
File dir=new File("F:\\test\\music");
//建立数据的输入通道
FileInputStream fileInputStream=new FileInputStream(file);
//建立缓冲数组
byte[] buf=new byte[1024*1024];//每一份大小为1M
int length=0;
for(int i=0;(length=fileInputStream.read(buf))!=-1;i++){
FileOutputStream fileOutputStream=new FileOutputStream(new File(dir,"part"+i+".mp3"));
fileOutputStream.write(buf, 0, length);
fileOutputStream.close();
}
fileInputStream.close();
}
//合并
public static void mergeFile() throws IOException{
//找到目文件夹
File dir=new File("F:\\test\\music");
//通过目标文件找到所有的mp3文件,然后把所有的文件读到vector中
Vector<FileInputStream> vector=new Vector<FileInputStream>();
File[] files=dir.listFiles();
for(File file:files){
if(file.getName().endsWith(".mp3")){
vector.add(new FileInputStream(file));
}
}
//通过Vector获取迭代器
//---public Enumeration<E> elements()---
Enumeration<FileInputStream> e=vector.elements();
//创建序列流
SequenceInputStream inputStream=new SequenceInputStream(e);
//建立文件的输出通道
FileOutputStream fileOutputStream=new FileOutputStream("F:\\test\\合并.mp3");
//建立缓冲数组读取文件
byte[] buf=new byte[1024];
int length=0;
while((length=inputStream.read(buf))!=-1){
fileOutputStream.write(buf,0,length);
}
//关闭资源
fileOutputStream.close();
inputStream.close();
}
}