Java实现大文件的切割与合并操作示例
本文实例讲述了Java实现大文件的切割与合并操作。分享给大家供大家参考,具体如下:
这里实现对大文件的切割与合并。
按指定个数切(如把一个文件切成10份)或按指定大小切(如每份最大不超过10M),这两种方式都可以。
在这里我只是给大家写下我自己的一点简单的代码:
packageio2;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.SequenceInputStream;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Enumeration;
importjavax.swing.JFileChooser;
publicclassFileSplitDemo{
/**
*实现对大文件的切割与合并。按指定个数切(如把一个文件切成10份)或按指定大小切(如每份最大不超过10M),这两种方式都可以。
*/
publicstaticvoidmain(String[]args){
JFileChooserjfc=newJFileChooser();//Swing中的选择文件
//选择文件
intresult=jfc.showOpenDialog(null);//显示框架用于选择文件
Filefile=null;//要切割的文件
Filedest=null;//目的地文件
try{
if(result==JFileChooser.APPROVE_OPTION){//选中文件
//切割文件
file=jfc.getSelectedFile();//用户选择的文件
dest=newFile(file.getParent(),"spliFile");
cutingFile(file,dest);//切割方法
//2合并(运行时,直接对刚才切割的那些文件碎片进行合并)
StringfileName=file.getName();
mergeDemo(dest,fileName);//合并文件
}
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
privatestaticvoidmergeDemo(Filedest,StringfileName)
throwsIOException{
//健壮性防护(用File对象去开道)
if(!dest.exists()){
thrownewRuntimeException("文件不存在");
}
//用一个文件数组将里面的文件都装起来
Fileparth[]=dest.listFiles();//返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
if(parth.length==0){
thrownewRuntimeException("碎片不存在");
}
//y用序列流来合并
ArrayListlist=newArrayList();
//for(inti=0;ien=Collections.enumeration(list);
SequenceInputStreamsq=newSequenceInputStream(en);
//写入到新文件中
FileOutputStreamfou=newFileOutputStream(newFile(dest,fileName));
bytebuf[]=newbyte[1024];
sq.read(buf);
intlen=0;
while((len=sq.read(buf))>0){
fou.write(buf,0,len);
}
fou.close();
sq.close();
}
privatestaticvoidcutingFile(Filesource,Filedest){
//切割
try{
FileInputStreamfis=newFileInputStream(source);
if(!dest.exists()){//文件操作IO流要判断文件是否存在。
dest.mkdir();
}
bytebuf[]=newbyte[1024*1024];//1M
fis.read(buf);
intlen=0;
intcout=1;
while((len=fis.read(buf))!=-1){
//用OUT流来切割文件
FileOutputStreamfout=newFileOutputStream(newFile(dest,
source.getName()+(cout++)+"part"));
fout.write(buf,0,len);
fout.close();
}
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
文件切割:把一个文件切割成多个碎片,每个碎片的大小不超过1M。自己可把功能进一步扩展:切割前的文件名、长度,切割后的碎片个数、文件名等信息可写到第一个碎片中或另外用properties把这些写到配置文件中。
文件合并:这里简单假设已知被合并目录的File对象和原文件的名字。其实这些完全可以做成活的,如把这些信息保存在碎片文件或配置文件,也可以同样用文件选择对话框来读取用户的选择。
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。