文件管理系统实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4部分、文件管理系统实现:
●基本要求:利用磁盘文件实现操作系统的文件管理功能,主要包括目录结构的管理、外存空间的分配与释放以及空闲空间管理三部分。
●参考学时:16学时
●实验提示:
1、通过初始化操作建立一个模拟外存空间的文件,在该文件中保存目录和
文件内容。创建该文件时应创建初始的根目录内容、索引节点以及空闲
空间位示图。根目录实为一特殊文件,其内容为“.”和“..”目录项。
2、索引节点应包括类型(目录 or文件)、创建日期、大小、磁盘地址(为
了简单起见,可采用单级索引方式)
3、显示命令提示符“$”,并根据输入命令完成相应的文件操作:
⏹MD(创建子目录):创建目录文件,并在父目录文件中增加目录项,最后
修改父目录文件大小
⏹CD(切换工作目录):根据当前目录切换到指定目录;
⏹RD(删除子目录):搜索所要删除的目录是否为空目录,若是则删除;
⏹MK(创建空文件):创建指定大小的文件(如输入命令“mk test 2000”,
表示创建大小为2000字节的test文件),并在父目录中添加文件名称;
还应对空闲空间位示图进行适当修改;
⏹DEL(删除文件):如果所要删除的文件存在,则删除,同时修改父目录
内容;还应对空闲空间位示图进行适当修改;
⏹DIR:列出当前目录的所有目录项。
//package osDemo;
import java.io.Serializable;
import java.util.Calendar;
public class FCB implements Serializable{
private String name;
int type;
int size;
String cal;
int firstblock;
public FCB(String name) {
if(name.getBytes().length>=6) {
=name.substring(0, 6);
}
else {
while(name.getBytes().length<6) {
name+='\u0000';
}
=name;
}
// =name;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getCal() {
return cal;
}
public void setCal(String cal) {
this.cal = cal;
}
public int getFirstblock() {
return firstblock;
}
public void setFirstblock(int firstblock) {
this.firstblock = firstblock;
}
}
//package osDemo;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.RandomAccessFile;
import java.util.Calendar;
class OS {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static String current_directory="";
final static int EMPTY_BLOCK=0xFFFE;
final static int LAST_BLOCK =0xFFFF;
final static int BLOCK_SIZE=1024;
static int firstblock=0;
static int blockcount;
static String filename="";
static RandomAccessFile raf1;
static ObjectOutputStream oos;
static FileOutputStream fos;
static DataOutputStream dos;
static File file;
static int f=0;//fat表中的块号
static int block=0;//写块号与md mk FCB写入块中
static int blockno=0;//读块号
static int times=0;
public static void main(String[]args)throws Exception {
while(true) {
String cmd="";
System.out.print(current_directory);
System.out.print("$:");
try {
cmd=br.readLine();
if((cmd.indexOf("exit"))!=-1) {
break;
}
else if(cmd.indexOf("dir")!=-1) {
dir(cmd);