0
点赞
收藏
分享

微信扫一扫

RandomAccessFile实现文件分割、合并

RandomAccessFile可使用的操作模式:

RandomAccessFile实现文件分割、合并_i++
“rwd”模式可用于减少执行的“I/O”操作数量。使用“rwd”仅要求更新要写入存储的文件的内容;使用“rws”要求更新要写入的文件内容与元数据。

1.文件分割

/*
* @param fileName:源文件;
* @param filterFolder:分割后文件所在的目录;
* @param size:分割文件大小,以KB为单位;
*/
public void cut(String fileName,String filterFolder,int size) throw Exception{

size = size*1024;
int maxx = 0;

//如果输出目录不存在则创建

File outFolder = new File(fileterFolder);
if(!outFolder.exists()){
outFolder.mkdirs();
}

File inFile = new File(fileName);
int fileLength = (int) inFile.length();//取得文件大小
int value;//取得文件要分割的个数
RandomAccessFile inRAF = new RandomAccessFile(inFile,"r");//打开要被分割的文件

value = fileLength/size;

int i = 0;
int j = 0;

for(;j<value;j++){
File outFile = new File(filterFolder+File.separator+inFile.getName()+j+"tmp");
RamdomAccessFile outRAF = new RandomAccessFile(outFile,"rw");
maxx +=size;
for(;i<maxx;i++){
outRAF.write(inRAF.read());
}
outRAF.close();
}
/*将最后不足 size 的字节内容输出*/
File outFile = new File(filterFolder+File.separator+inFile.getName()+j+"tmp");
RamdomAccessFile outRAF = new RandomAccessFile(outFile,"rw");
for(;i<fileLength;i++){
outRAF.write(inRAF.read());
}
outRAF.close();
inRAF.close();

}

2.文件合并

/*
* @param fileName:合并之后的文件;
* @param filterFolder:分割文件所在的目录;
* @param filterName:分割后的文件后缀
*/
public void unite(String fileName,String filterFolder,final String filterName) throws Exception{

File[] tt;

File inFile = new File(filterFolder);//在当前目录下的文件
File outFile = new File(fileName);//取得输出名
RandomAccessFile outRAF = new RandomAccessFile(outFile,"rw");
/*
FilenameFilter:文件名过滤器;
boolean accept(File dir,String name);
//dir表示文件的当前目录,name表示文件名;
//FilenameFilter用来把符合要求的文件或目录返回;

*/
tt = inFile.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
String rr = new File(name).toString();
return rr.endsWith(filterName);
//filterName 为final ,故方法内部的匿名类可以取得
}
});

//打印取得的文件名
for(int i = 0 ;i<tt.length;i++){
System.out.println(tt[i]);
}

//打开所有的文件再写入一个文件里
for(int i = 0;i<tt.length,i++){
RandomAccessFile inRAF = new RandomAccessFile(tt[i],"r");
int e;
while((e=inRAF.read()! = -1)){
outRAF.write(e);
}
}

outRAF.close();

}


举报

相关推荐

0 条评论