importjava.io.*;publicclasswaibupaixu {staticint[] arr=newint[10];finalstaticintMAXCOUNT=1000;publicstaticvoidcreateRandomNumberFile()throwsIOException {
RandomAccessFile raf=newRandomAccessFile("raw","rw");
FileOutputStream fos=newFileOutputStream("source.txt");
PrintStream ps=newPrintStream(fos);
PrintStream old=System.out;
System.setOut(ps);intrandomNum;for(inti=0; i
randomNum=(int) (Math.random()*10000);
raf.writeInt(randomNum);
System.out.print(randomNum+"\t");if((i+1)%5==0) {
System.out.println();
}
}
System.setOut(old);
ps.close();
fos.close();
}publicstaticvoidmain(String[] args)throwsIOException
{
RandomAccessFile rafa[]=newRandomAccessFile[10];//外部文件 等待归并RandomAccessFile rafb=null;//外部文件 归并目标intmin;//等待归并的元素 定位createRandomNumberFile();longt1,t2;
t1=System.currentTimeMillis();
System.out.println(""+"排序开始:"+t1);for(inti=0; i<100; i++) {
readRandomNumberFile("raw",i*10,10);//读10个sort_arr();//排序writeRandomNumberFile("raw10_"+i,0,10);//写小文件}for(inti=0; i<10; i++) {
rafb=newRandomAccessFile("raw100_"+i,"rwd");//读入10个for(intj=0; j<10; j++) {
rafa[j]=newRandomAccessFile("raw10_"+(10*i+j),"rwd");
arr[j]=rafa[j].readInt();
}//剩余90个for(intj=0; j<100; j++) {
min=0;for(intk=0; k<10; k++) {if(arr[k]!=-1)
min=k;
}//找到最小for(intk=0; k<10; k++) {if(arr[k]
min=k;
}//保存rafb.writeInt(arr[min]);//替补读入if(arr[min]!=-1)
{if( rafa[min].getFilePointer()
{
arr[min]=rafa[min].readInt();
}else{
arr[min]=-1;
}
}
}for(intj=0; j<10; j++) {
rafa[j].close();
rafa[j]=null;
}
rafb.close();
rafb=null;
}
rafb=newRandomAccessFile("raw1000","rw");//读入10个for(inti=0; i<10; i++) {
rafa[i]=newRandomAccessFile("raw100_"+i,"rw");
arr[i]=rafa[i].readInt();
}//剩余990个for(inti=0; i<1000; i++) {
min=0;for(intk=0; k<10; k++) {if(arr[k]!=-1)
min=k;
}//找到最小for(intk=0; k<10; k++) {if(arr[k]
min=k;
}//保存rafb.writeInt(arr[min]);//替补读入if(arr[min]!=-1)
{if( rafa[min].getFilePointer()
{
arr[min]=rafa[min].readInt();
}else{
arr[min]=-1;
}
}
}for(intj=0; j<10; j++) {
rafa[j].close();
rafa[j]=null;
}
rafb.close();
rafb=null;
t2=System.currentTimeMillis();
System.out.println(""+"排序结束:"+t2);
System.out.println(""+"用时 ("+(t2-t1)+"ms)");
Raw2Txt("raw1000","sort1000.txt",1000);
System.gc();for(inti=0; i<10; i++) {
File n=newFile("raw100_"+i);
forceDeleteFile(n);
}for(inti=0; i<100; i++) {
File n=newFile("raw10_"+i);
forceDeleteFile(n);
}
}publicstaticvoidsort_arr( ){inttmp;for(inti=0; i<9; i++) {for(intj=i+1; j<10; j++) {if(arr[i]>arr[j])
{
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}
}
}//从位置m,读入n个整数到arr数组publicstaticvoidreadRandomNumberFile(String file,longm,longn)throwsIOException
{
RandomAccessFile raf=newRandomAccessFile(file,"rwd");
raf.seek(Integer.SIZE/8*(m));for(inti=0; i
arr[i]=raf.readInt();
}
raf.close();
raf=null;
}//从位置m,将arr数组的n个整数写入文件publicstaticvoidwriteRandomNumberFile(String file,longm,longn)throwsIOException
{
RandomAccessFile raf=newRandomAccessFile(file,"rwd");
raf.seek(Integer.SIZE/8*(m));for(inti=0; i
raf.writeInt(arr[i]);
}
raf.close();
raf=null;
}publicstaticvoidRaw2Txt(String src,String dst,longn)throwsIOException {inttmp;
RandomAccessFile raf=newRandomAccessFile(src,"rwd");
FileOutputStream fos=newFileOutputStream(dst);
PrintStream ps=newPrintStream(fos);
PrintStream old=System.out;
System.setOut(ps);for(inti=0; i
tmp=raf.readInt();
System.out.print(tmp+"\t");if((i+1)%5==0) {
System.out.println();
}
}
raf.close();
raf=null;
System.setOut(old);
ps.close();
fos.close();
}staticbooleanforceDeleteFile(File file)
{booleanresult=false;intdelCount=0;while(!result&&delCount++<9)
{
System.gc();
result=file.delete();
}returnresult;
}
}