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(); }