当前位置:
文档之家› 操作系统课程设计--二级文件系统(java)
操作系统课程设计--二级文件系统(java)
五、实现的功能
1、用户的注册和登陆 2、 dir 列文件目录 3、 create 创建文件 4、 delete 删除文件 5、 read 读文件 6、 write 写文件 7、 cd 更改目录 8、 rename 重命名文件名
六、实验感悟
首先想说一句话: “没被逼着是不会出大力的” 。解释一下,看到同学们用的都是以前的 C 或者是 C++的文件代码。我自己考来一份,这个悲催啊,自己的 C\C++的功底实在是太差 劲的, 直接看不懂, 也没那耐心烦。从网上 down 了几份 java 的代码。其中有一份写的不错, 很巧妙的实现了老师的要求。 可是以真正的课程设计的原理真是风马牛不相及啊。 怕老师不 让过,于是下决心自己写一下(觉得自己对相应的原理还是知道一些的) 。 我的痛苦的过程也就开始了。 我真的有一次体味到写程序最难得不是代码的编写, 而是 思路、思路、思路。前一天很容易的就实现了用户登录相应的操作。同时数据读写的工具类 和项目的框架也算是粗糙的完成了。可是接下来就写不下去了,原因是 Inode 和 file 或者 directory 之间是如何关联的。这三个类的属性是如何定义和分配的。自己拿笔也在纸上画, 又和舍友李新等同学探讨。有思考了一天多,模模糊糊的开始写,又改有写。就这样一点一 点的写着改着,痛苦着并高兴着。终于粗糙的写完了。时间太短啊,还有许多可以优化的地 方还没来得修改。 周五下午,怀着一颗忐忑的心找老师验程序。当听到老师的一句: “写的还不错么! ”那 种高兴无法用言语来形容!这几天的痛苦、熬夜都值了。谢谢老师的夸奖!
2、列目录时要列出文件名、物理地址、保护码和文件长度; 3、源文件可以进行读写保护。
三、实验过程
1、程序流程
登录
输入用户名
用户存在
否 注册
是 进入目录管理
3
登陆完成
用户登录流程
列出目录文件
读取文件
是否当前 用户文件
Hale Waihona Puke 否是 展示文件完成
列文件目录流程
2、主要类介绍
(1)、public class Systems 文件系统的主类 (2)、public class MyFile 自定义的文件结构体类 (3)、public class MyDirectory 自定义的目录的结构体类 (4)、public class SuperBlock implements Serializable 超级快结构体类 (5)、 public class INode implements Serializable, Comparable<INode> 自定义 INode 节点实体类 (6)、public class FileTools 自定义数据文件的读写工具类
7
* 空的文件目录的索引 */// 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")) { int m = 0; System.out.println(" 文 件 名 \t 用户名 \t 地址 \t 文件长度 \t 只读 1/ 可写 2\t 打开控制"); if (now_file instanceof MyDirectory) { MyDirectory now__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<Integer> dir_inodes.iterator(); (iteratore.hasNext()) { Object file = blocks[now__real_file.getTree().get( iteratore while =
附录:程序主要代码
5
1. Systems.java
import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; import java.util.Set; import java.util.StringTokenizer; /** * 文件管理系统 主类 * * @author liaijun * */ public class Systems { Scanner sc = new Scanner(System.in);// 从控制台读取数据 public static SuperBlock sb = null;// 超 级块 记录虚拟磁盘的总信息 public static ArrayList<String> users;// 用户名数组; public static INode[] inodes = new INode[100];// i 节点记录数据结构 public static Object[] blocks = new Object[100];// 文件块的结构; public static String name = null;// 当 前 登录用户名 public static INode now_inode = null;// 当前节点 public static Object now_file = null; // public static INode father;//父节点 // public static INode me;//自己的当前节 点
/** * @param args */ public static void main(String[] args) { Systems sts = new Systems(); sts.init();// 初始化数据; sts.login();
System.out.println("*************** 欢 迎使用该文件管理系统*************"); 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()];// 得到当前 的目录 System.out.println(" 登 录 成 功 "); execute(); } } /** * 命令执行的主方法 */ public void execute() { String commond = null; String cmd[] = null;// 操 作 命令 数 组 cmd[0] 操作的命令 cmd[1]操作的文件 /* * INode id = new INode();// 文件 的节点 int fileNumber = 0;// 拥有文件的总 数 int * getNumber = 0;// 存储打开文件 的节点索引号,或者说是虚拟的内存地址 int emptyNumber = 0;//
2
一、实验目的
通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。
二、实验内容
为linux系统设计一个简单的二级文件系统。要求做到以下几点: 1、可以实现下列几条命令(至少 4 条); login dir create delete open close read write 用户登陆 列文件目录 创建文件 删除文件 打开文件 关闭文件 读文件 写文件
} public void init() { users = (ArrayList<String>) FileTools.read("f:\\users.dat"); /* * if(null!=FileTools.read("f:\\users.dat")) { //inodes=(INode[]) * FileTools.read("f:\\users.dat"); } */ sb = (SuperBlock) FileTools.read("f:\\super.dat"); if (null == sb || sb.getAlreadyuse() == 0) { for (int i = 0; i < 100; i++) { inodes[i] = new INode(); } sb = new SuperBlock(); for (int i = 0; i < 100; i++) { sb.setInode_free(i); } FileTools.write("f:\\super.dat", sb); } if (null == users) { users = new ArrayList<String>();// 存放整个文件系统 users.add("admin"); FileTools.write("f:\\users.dat", users); } } public void login() {