class FileUtils
{
/*
文件的切割与合并的工具类
*/
public static void main(String[] args)
{
File file=new File("c:\\test.avi");
File srcDir;
File dFile;
try{
// split(file);
srcDir=new File("c:\\temp");
dFile=new File("c:\\temp\\temp.avi");
merge(srcDir,dFile);
}catch(Exception e){
e.printStackTrace();
}
}
//将分割的文件进行合并
//需要传递指定的目录,和合并后的文件的对象
public static void merge(File dir,File dFile) throws IOException{
//Vector它虽然是可以获取enumeration但是速度太慢
//使用arraylist效率会高一些
ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
for(int x=1;x<=getPartCount(dir);x++){
//创建与之对应的流对象
al.add(new FileInputStream("c:\\temp\\temp"+x+".part"));
}
//arraylist中没有enumeration.它有iterator
//我们可以自己来实现
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);
//我们来读取数据并且进行操作
byte[] buff=new byte[1024];
int len=0;
FileOutputStream fos=new FileOutputStream(dFile);
while((len=sis.read(buff))!=-1){
fos.write(buff,0,len);
}
fos.close();
sis.close();
}
//获取指定目录下的part切割文件的数量
public static int getPartCount(File dir) throws IOException{
ArrayList<File> list=new ArrayList<File>();
if(dir.isDirectory()){
//如果是目录则执行该动作
File[] files=dir.listFiles();
for(File file:files){
if(file.isDirectory()){
getPartCount(file);
}else{
//获取part文件的数量
if(file.getName().endsWith(".part")){
list.add(file);
}
}
}
}
return list.size(); //否则直接返回0
}
//文件切割的方法
public static void split(File sFile) throws IOException{
//使用流和文件相关联
FileInputStream fis=new FileInputStream(sFile);
//文件输出流
FileOutputStream fos=null;
//新建一个大小为1MB的缓存
byte[] buffer=new byte[1024*1024];
int len=0; //记录读取的文件的个数
int count=1; //用于文件名的计数
while((len=fis.read(buffer))!=-1){
fos=new FileOutputStream(new File("c:\\temp"+(count++)+".part"));
fos.write(buffer,0,len); //把数据写入到文件中
fos.close(); //关闭流
}
fis.close();
}
}
《黑马程序员》 合并流之文件切割与合并的工具类
最新推荐文章于 2022-05-11 00:54:31 发布