实验三模拟文件存储空间管理1.内容:模拟文件存储空间的管理,采用空白文件目录法和空白块链法实施空间分配。2.思想:文件存储空间管理是文件系统的重要内容。常用的管理思想有空白文件目录法、空白块链法和位示图法。本实验采用前两种方法进行空间分配。(1)空白文件目录法进行空间分配时,需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表和已使用区域分配表。为此需建立两张表格,分别记录相关数据。空白文件目录表(初始)空白文件目录(中间)已使用区域表(中间)上述两张表的数据在系统运行中是发生变化的。序号首空白块号空白快个数物理块号备注101000,1,2,……,98,99序号首空白块号空白块个数物理块号标志1242,3,4,5未分配2939,10,11未分配325525,26,27,28,29未分配439239,40未分配5………………未分配文件标识首块号文件块个数状态备注beta02占用Alpha63占用Toyota1213占用Sony309占用Ford504占用……………………文件空闲区分配和释放算法如下图所示:图一文件空闲区分配算法图二文件空闲区回收算法(2)空白块链法进行空间分配时,需要建立链表数据结构,将空闲块按顺序加以组织,分配和回收时在链首完成,同时建立文件目录,记录文件占用空间情况。3.要求:(1)自拟模拟数据演示运行结果(假定系统可用空闲块数为100)。为便于检查,建立和删除文件顺序如下:分配文件:F1,3分配文件:F2,5分配文件:F3,3分配文件:F4,8分配文件:F5,4分配文件:F6,2删除文件:F1删除文件:F2分配文件:F7,6删除文件:F3分配文件:F8,4删除文件:F5分配文件:F9,4……每完成一个文件的分配和删除后,显示空白文件目录当前内容。(2)空白文件目录法必须完成,空白块链法选做。4.书写实验报告:文件标识首块号备注beta0Alpha6Toyota12Sony30Ford50…………①实验题目;②程序中所用的数据结构及说明;③源程序并附上必要的说明;④按照文件的创建和删除顺序,打印输出结果。源代码:1.packagecom.gongziqian.savefile;publicclassFileInformation{//插入文件名StringfileName;//首块号intstart;//intn;/***文件块*@paramfileName*@paramstart*@paramn*/publicFileInformation(StringfileName,intstart,intn){this.fileName=fileName;this.start=start;this.n=n;}}2.packagecom.gongziqian.savefile;importjava.util.*;publicclassFileOprator{int[]file=newint[100];ListFileInformationlist=newArrayListFileInformation();/***构造方法*/publicFileOprator(){}/***插入文件**@paramfileName*@paramn*/publicvoidinsert(StringfileName,intn){intx=0;for(inti=0;ifile.length;i++){if(get(i)==0){x++;}else{x=0;}if(x=n){System.out.println(文件+fileName+插入成功!);list.add(newFileInformation(fileName,i-n+1,n));for(intj=0;jn;j++){set(i-j,1);}break;}}}/***删除文件**@paramfileName*/publicvoidremove(StringfileName){intstart=-1;intn=0;intindex=0;for(inti=0;ilist.size();i++){if(list.get(i).fileName.equals(fileName)){start=list.get(i).start;n=list.get(i).n;index=i;}}for(inti=0;in;i++){set(start+i,0);}if(start==-1){System.out.println(文件不存在,请重新输入:);}else{list.remove(index);System.out.println(文件+fileName+删除成功!);}}/***显示文件详细信息*/publicvoidshowFile(){for(inti=0;ilist.size();i++){intlen=list.get(i).n;intsta=list.get(i).start;System.out.print(文件名:+list.get(i).fileName);System.out.print(\t首块号:+sta);System.out.print(\t物理块数:+len);System.out.print(\t物理块号:);for(intj=0;jlen;j++){System.out.print(sta+j+);}System.out.println();}}/***显示存储空间所有情况*/publicvoidshowAll(){System.out.print(存储空间:);for(inti=0;ifile.length;i++){System.out.print(get(i));}System.out.println();}/***显示空白块*/publicvoidshowEmpty(){intx=0;inty=1;for(inti=x;ifile.length;i++){if(get(i)==0){x++;y=0;}else{y++;}if(y==1){System.out.println(空白首块号:+(i-x)+空白物理块数:+x);x=0;}if(i==file.length-1){System.out.println(空白首块号:+(i-x+1)+空白物理块数:+x);}continue;}}/***获得索引为i位置的值**@parami*@return*/publicintget(inti){returnfile[i];}/***在索引为i的位置置值f**@parami*@paramf*/publicvoidset(inti,intv){file[i]=v;}/***@return返回数组的长度,即空间的大小*/publicintlength(){returnfile.length;}}3.packagecom.gongziqian.savefile;importjava.util.Scanner;publicclassSaveFile{publicstaticvoidmain(String[]args){FileOpratorfile=newFileOprator();file.showAll();file.showEmpty();while(true){System.out.println(\n请进行操作(1.插入2.删除0.退出):);Scannerop=newScanner(System.in);Stringi=op.next();if(i.equals(1)){System.out.println(分配文件格式:文件名物理块数);Scannerinsert=newScanner(System.in);StringfileName=insert.next().trim();intn=insert.nextInt();file.insert(fileName,n);file.showFile();file.showEmpty();file.showAll();}elseif(i.equals(2)){System.out.println(删除文件格式:文件名);Scannerremove=newScanner(System.in);StringfileName=remove.next().trim();file.remove(fileName);file.showFile();file.showEmpty();file.showAll();}elseif(i.equals(0)){System.out.println(系统退出……);break;}else{System.out.println(输入操作类型有误,请重新操作:);}}}}J结果图:存储空间:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000空白首块号:0空白物理块数:100请进行操作(1.插入2.删除0.退出):1分配文件格式:文件名物理块数F13文件F1插入成功!文件名:F1首块号:0物理块数:3物理块号:012空白首块号:3空白物理块数:97存储空间:1110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000请进行操作(1.插入2.删除0.退出):1分配文件格式:文件名物理块数F25文件F2插入成功!文件名:F1首块号:0物理块数:3物理块号:012文件名:F2首块号:3物理块数:5物理块号:34567空白首块号:8空白物理块数:92存储空间:1111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000请进行操作(1.插入2.删除0.退出):1分配文件格式:文件名物理块数F33文件F3插入成功!文件名:F1首块号:0物理块数:3物理块号:012文件名:F2首块号:3物理块数:5物理块号:34567文件名:F3首块号:8物理块数:3物理块号:8910空白首块号:11空白物理块数:89存储空间:1111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000请进行操作(1.插入2.删除0.退出):1分配文件格式:文件名物理块数F48文件F4插入成功!文件名:F1首块号:0物理块数:3物理块号:012文件名:F2首块号:3物理块数:5物理块号:34567文件名:F3首块号:8物理块数:3物理块号:8910文件名:F4首块号:11物理块数:8物理块号:1112131415161718空白首块号:19空白物理块数:81存储空间:1111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000请进行操作(1.插入2.删除0.退出):1分配文件格式:文件名物理块数F54文件F5插入成功!文件名:F1首块号:0物理块数:3物理块号:012文件名:F2首块号:3物理块数:5物理块号:34567文件名:F3首块号:8物理块数:3物理块号:8910文件名:F4首块号:11物理块数:8物理块号:1112131415161718文件名:F5首块号:19物理块数:4物理块号:19202122空白首块号:23空白物理块数:77存储空间:11111111111111111111