RandomAccessFile可使用的操作模式:
“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();
}