操作系统课程设计二级文件系统Word文档下载推荐.docx

上传人:b****5 文档编号:20859000 上传时间:2023-01-26 格式:DOCX 页数:34 大小:49.26KB
下载 相关 举报
操作系统课程设计二级文件系统Word文档下载推荐.docx_第1页
第1页 / 共34页
操作系统课程设计二级文件系统Word文档下载推荐.docx_第2页
第2页 / 共34页
操作系统课程设计二级文件系统Word文档下载推荐.docx_第3页
第3页 / 共34页
操作系统课程设计二级文件系统Word文档下载推荐.docx_第4页
第4页 / 共34页
操作系统课程设计二级文件系统Word文档下载推荐.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

操作系统课程设计二级文件系统Word文档下载推荐.docx

《操作系统课程设计二级文件系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计二级文件系统Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。

操作系统课程设计二级文件系统Word文档下载推荐.docx

3、源文件可以进行读写保护。

三、实验过程

1、程序流程

用户登录流程

列文件目录流程

2、主要类介绍

(1)、publicclassSystems文件系统的主类

(2)、publicclassMyFile自定义的文件结构体类

(3)、publicclassMyDirectory自定义的目录的结构体类

(4)、publicclassSuperBlockimplementsSerializable超级快结构体类

(5)、publicclassINodeimplementsSerializable,Comparable<

INode>

自定义INode节点实体类

(6)、publicclassFileTools自定义数据文件的读写工具类

四、设计思路

1、一个磁盘的有扇区(超级块)、索引块区(Inode节点区)、存储区(数据块区)

2、扇区中主要是存储磁盘的总大小、空闲Inode节点、使用的Inode节点、已使用空间、空闲空间。

3、Inode节点主要存储:

当前的地址、文件的长度、用户名、读写的权限、文件是否打开、文件的类型(0代表目录,1代表普通文件)、对应文件块的地址(即序号)、父节点块号、自己的当前节点的序号。

4、自定义目录:

文件对应Inode的索引、文件的名字、当前目录下的Inode和文件的对应关系(privateTreeMap<

Integer,Integer>

tree)

5、自定应文件:

文件对应Inode的索引、文件名字、/数据内容。

6、控制类:

得到用户的输入操作调用相应的操作。

五、实现的功能

1、用户的注册和登陆

2、dir列文件目录

3、create创建文件

4、delete删除文件

5、read读文件

6、write写文件

7、cd更改目录

8、rename重命名文件名

六、实验感悟

首先想说一句话:

“没被逼着是不会出大力的”。

解释一下,看到同学们用的都是以前的C或者是C++的文件代码。

我自己考来一份,这个悲催啊,自己的C\C++的功底实在是太差劲的,直接看不懂,也没那耐心烦。

从网上down了几份java的代码。

其中有一份写的不错,很巧妙的实现了老师的要求。

可是以真正的课程设计的原理真是风马牛不相及啊。

怕老师不让过,于是下决心自己写一下(觉得自己对相应的原理还是知道一些的)。

我的痛苦的过程也就开始了。

我真的有一次体味到写程序最难得不是代码的编写,而是思路、思路、思路。

前一天很容易的就实现了用户登录相应的操作。

同时数据读写的工具类和项目的框架也算是粗糙的完成了。

可是接下来就写不下去了,原因是Inode和file或者directory之间是如何关联的。

这三个类的属性是如何定义和分配的。

自己拿笔也在纸上画,又和舍友李新等同学探讨。

有思考了一天多,模模糊糊的开始写,又改有写。

就这样一点一点的写着改着,痛苦着并高兴着。

终于粗糙的写完了。

时间太短啊,还有许多可以优化的地方还没来得修改。

周五下午,怀着一颗忐忑的心找老师验程序。

当听到老师的一句:

“写的还不错么!

”那种高兴无法用言语来形容!

这几天的痛苦、熬夜都值了。

谢谢老师的夸奖!

程序主要代码

1.Systems.java

importjava.util.ArrayList;

importjava.util.Iterator;

importjava.util.Scanner;

importjava.util.Set;

importjava.util.StringTokenizer;

/**

*文件管理系统主类

*

*@authorliaijun

*/

publicclassSystems{

Scannersc=newScanner(System.in);

//从控制台读取数据

publicstaticSuperBlocksb=null;

//超级块记录虚拟磁盘的总信息

publicstaticArrayList<

String>

users;

//用户名数组;

publicstaticINode[]inodes=newINode[100];

//i节点记录数据结构

publicstaticObject[]blocks=newObject[100];

//文件块的结构;

publicstaticStringname=null;

//当前登录用户名

publicstaticINodenow_inode=null;

//当前节点

publicstaticObjectnow_file=null;

//publicstaticINodefather;

//父节点

//publicstaticINodeme;

//自己的当前节点

/**

*@paramargs

publicstaticvoidmain(String[]args){

Systemssts=newSystems();

sts.init();

//初始化数据;

sts.login();

}

publicvoidinit(){

users=(ArrayList<

)FileTools.read("

f:

\\users.dat"

);

/*

*if(null!

=FileTools.read("

)){//inodes=(INode[])

*FileTools.read("

*/

sb=(SuperBlock)FileTools.read("

\\super.dat"

if(null==sb||sb.getAlreadyuse()==0){

for(inti=0;

i<

100;

i++){

inodes[i]=newINode();

}

sb=newSuperBlock();

sb.setInode_free(i);

FileTools.write("

sb);

}

if(null==users){

users=newArrayList<

();

//存放整个文件系统

users.add("

admin"

users);

publicvoidlogin(){

System.out.println("

***************欢迎使用该文件管理系统*************"

请先登录->

"

name=sc.next();

if(!

this.isInNames(name)){

System.out.println("

该用户名不存在!

是否注册该用户?

y/n"

if("

y"

.equals(sc.next())){

if(regeist(name)){

System.out.println(name+"

注册成功!

login();

}else{

System.out.println("

注册失败!

System.exit(0);

}

}else{

login();

}else{

now_inode=getInode(name+"

->

//得到当前的inode

now_file=blocks[now_inode.getAddress()];

//得到当前的目录

登录成功"

execute();

*命令执行的主方法

publicvoidexecute(){

Stringcommond=null;

Stringcmd[]=null;

//操作命令数组cmd[0]操作的命令cmd[1]操作的文件

*INodeid=newINode();

//文件的节点intfileNumber=0;

//拥有文件的总数int

*getNumber=0;

//存储打开文件的节点索引号,或者说是虚拟的内存地址intemptyNumber=0;

//

*空的文件目录的索引

*///System.out.println(now_inode.getPath());

while(true){

System.out.print(now_inode.getPath());

commond=sc.nextLine();

if(commond.equals("

))

commond=sc.nextLine();

cmd=commond.trim().split("

"

//列举同一个人用户名的文件目录

if(cmd[0].trim().equals("

dir"

)){

intm=0;

System.out.println("

文件名\t用户名\t地址\t文件长度\t只读1/可写2\t打开控制"

if(now_fileinstanceofMyDirectory){

MyDirectorynow__real_file=(MyDirectory)now_file;

m=now__real_file.getTree().size();

if(m==0){

System.out.println("

没有目录项"

}else{

Set<

Integer>

dir_inodes=now__real_file.getTree()

.keySet();

Iterator<

iteratore=dir_inodes.iterator();

while(iteratore.hasNext()){

Objectfile=blocks[now__real_file.getTree().get(

iteratore.next())];

if(fileinstanceofMyDirectory){

MyDirectoryreal_file=(MyDirectory)file;

INodereal_inode=inodes[real_file

.getInode_address()];

//"

文件名\t用户名\t地址\t文件长度\t只读1/可写2\t打开控制\t创建时间"

System.out.println(real_file.getName()+"

\t"

+real_inode.getUsers()+"

+real_inode.getAddress()+"

+real_inode.getLength()+"

B\t"

+real_inode.getRight()+"

+real_inode.getState()+"

+real_inode.getModifytime());

}else{

MyFilereal_file=(MyFile)file;

}

}

文件个数---"

+m);

}

MyFilenow__real_file=(MyFile)now_file;

//创建文件

elseif(cmd[0].equals("

create"

intindex=getFreeInode();

if(index!

=-1){

MyFilemy_file=newMyFile();

my_file.setName(cmd[1]);

INodeinode=newINode();

inode.setFather(now_inode.getMe());

inode.setUsers(name);

inode.setMe(index);

inode.setModifytime();

if(inode.getFather()==-1){

inode.setPath(name+"

inode.setPath(inodes[inode.getFather()].getPath()

+cmd[1]+"

inode.setRight

(1);

//可写

inode.setState("

open"

inode.setType

(1);

//文件

inode.setAddress(index);

inodes[index]=inode;

my_file.setInode_address(index);

MyDirectoryreal_file=(MyDirectory)now_file;

blocks[index]=my_file;

real_file.getTree().put(index,index);

System.out.println(cmd[1]+"

文件已经打开!

请输入内容。

#end结束输入"

StringBuffercontent=newStringBuffer();

while(true){

Stringtem=sc.nextLine();

if(tem.equals("

#end"

System.out.println("

文件输入结束"

break;

//文件输入结束

content.append(tem+"

\r\n"

my_file.setSubstance(content.toString());

inodes[index].setLength(content.length());

inodes[index].setState("

close"

文件已关闭!

sb.setAlreadyuse(content.length());

sb.setInode_busy(index);

inode申请失败!

//创建文件目录

elseif(cmd[0].trim().equals("

mkdir"

MyDirectorymy_file=newMyDirectory();

inode.setPath(now_inode.getPath()+cmd[1]+"

inode.setType(0);

inodes[index].setLength(0);

//删除文件的操作

delete"

Objecto=this.getFileByName(cmd[1]);

if(null!

=o){

if(oinstanceofMyDirectory){

MyDirectoryo1=(MyDirectory)o;

if(o1.getTree().size()==0){

intindex=o1.getInode_address();

sb.setInode_free(index);

//重置节点

inodes[index]=newINode();

//重置数据块

blocks[o1.getInode_address()]=newObject();

//在目录的tree中删除数据

MyDirectoryfile=(MyDirectory)now_file;

file.getTree().remove(index);

System.out.println(o1.getName()+"

目录已删除!

}else{

目录不为空!

不可以删除"

}elseif(oinstanceofMyFile){

MyFileo1=(MyFile)o;

intindex=o1.getInode_address();

//设置超级快

sb.setInode_free(index);

sb.setFreeuse(inodes[index].getLength());

//重置节点

inodes[index]=newINode();

//重置数据块

blocks[o1.getInode_address()]=newObject();

//在目录的tree中删除数据

MyDirectoryfile=(MyDirectory)now_file;

file.getTree().remove(index);

System.out.println(o1.getName()+"

文件已删除!

System.out.println(cmd[1]+"

文件不存在!

}elseif(cmd[0].trim().equals("

cd"

if("

."

.equals(cmd[1])){

}elseif("

.."

if(now_inode.getFather()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1