程序打开时会有点慢,因为需要初始化并读取数据,请耐心等待
- 项目简介
- 界面简介
- 项目结构
- 实现思想
- 改进之处
- 代码文档
-
项目名称:
文件系统模拟程序
-
开发环境:
Eclipse + JDK SE 7 + Mac OS X 10.9.3
-
项目概述:
本项目模拟了一个文件系统,用户可以做到新建文件、新建文件夹、编辑文件、删除文件、删除文件夹、格式化磁盘等操作,就像平时系统中真正的文件管理器一样,只是本项目将一些功能简化了,当用户退出时,所有的信息将会被保存在电脑真实的磁盘上,下次打开时重新读入
整体界面借鉴了_邱峰学长的项目_的界面
本项目依照MVC的思想进行架构,各层次分明
src/
├── controller/
│ ├── DiskManager.java
│ ├── IO.java
│ ├── MainController.java
│ └── SystemCore.java
│
├── model/
│ └── sys/
│ ├── Block.java
│ ├── Config.java
│ └── FCB.java
│
└── view/
├── Config.java
├── DocumentIconPanel.java
├── EditView.java
└── MainView.java
这一部分关乎整个项目的用户界面
-
Config.java
该文件与界面无关,主要定义了一些整个View中用到的一些公共的参数,比如窗口长宽、文件图标的大小等
package view; public class Config { // Window public static final int WINDOW_WIDTH = 800; public static final int WINDOW_HEIGHT = 600; // File icon public static final int FILE_ICON_SIZE = 80; public static final int FILE_ICON_PANEL_SIZE = 100; }
-
DocumentIconPanel.java
该文件与文件的图标有关,添加了鼠标点击事件的监听,支持单击选中、双击打开、右键弹出菜单
-
EditView.java
该文件与文件的编辑界面有关,可以编辑文字
如果对文件进行过修改,窗口标题中的 "Edit" 会变成 "Edited" ,并且在退出时会询问用户是否需要保存;如果没有修改则直接退出
-
MainView.java
该文件与程序主界面有关
主界面上部分由 后退(Back) 、 前往(Go) 、 地址栏 组成
下部分为主要部分,展示当前目录下的文件和文件夹,添加了鼠标点击事件的监听,右键弹出菜单,可以选择 "新建文件" 、 "新建文件夹" 、 "格式化"(仅根目录下)
下文叙述时“磁盘”指本程序中的“虚拟磁盘”,“物理块”指“虚拟磁盘中的块”;当提到“真实物理磁盘”时,才是指用户电脑的“物理磁盘”磁盘中“物理块”
-
Config.java
该文件同样定义了一些整个Model中用到的一些公共参数
package model.sys; import java.nio.charset.Charset; public class Config { public static final int BLOCK_SIZE = 512; public static final int BLOCK_COUNT = 8000; public static final int SYS_BLOCK_COUNT = 256; public static final int FILE_MAX_BLOCKS = 10; public static enum FILE_TYPE { FILE, DIRECTORY }; public static final Charset CHARSET = Charset.forName("UTF-8"); }
-
Block.java
该文件描述了磁盘中“物理块”的模型,它可以从真实物理磁盘中同步数据
-
FCB.java
该文件定义了文件系统中的文件控制块模型
下文叙述时“磁盘”指本程序中的“虚拟磁盘”;当提到“真实物理磁盘”时,才是指用户电脑的“物理磁盘”
-
DiskManager.java
该部分负责磁盘位图的管理,以及请求/释放空间
-
IO.java
该部分负责对磁盘的读写
-
MainController.java
该部分是项目中最主要的部分,负责Model与View的交流,通过Model的数据来填充View并展示给用户
-
SystemCore.java
该部分是文件系统的核心,负责以下功能:
- 创建文件
- 创建文件夹
- 删除文件
- 删除文件夹
- 读文件
- 写文件
- 进入目录
- 离开目录
- 格式化磁盘
- 文件存储空间管理:连续结构
- 空间分配的方法:连续分配
- 空闲空间的管理:位图法
- 目录结构:树型目录结构
其中位图存放在前两个物理块中
文件存储采用 连续结构 虽然容易实现,但是也有诸多缺点,文件不能动态增长,预留的空间如同一种浪费,采用 索引结构 会更好
另外,空间分配的方法其实与文件存储空间的管理方法有关,如果采用 索引结构 ,那么空间可以按需分配,不需要给出预留空间
(见代码中的注释)