一、使用说明1.1 项目简介
在内存中开辟一个空间作为文件存储器,在其上实现一个简单的文件系统。本项目基于的操作系统,来模拟实现文件管理系统,并且学习环境下使用Java实现申请磁盘空间、分配并管理物理空间以及多级目录结构。
1.2 项目功能1.3 操作手册
运行程序后,首先进入文件管理系统操作界面。
新建文件(文件夹)并命名
点击右上角“+”按钮可以新建文件或文件夹,并可以给该文件或文件夹命名。
效果1效果2效果3
读文件/写文件
读文件操作java 文件大小格式化,点击创建的文本文件(点击图标),会显示该文本文件内容。
默认情况下文本文件为空,可以在编辑框输入文字。
编辑框下方提供三种操作,“关闭”直接关闭文件,“保存”将当前编辑框内容追加到文本后方,“重新保存”将当前编辑框内容覆盖原文本文件。
效果1效果2效果3
目录框
建立文件夹后,点击图标可以进入文件夹内,上方目录框会显示当前物理位置。
点击左上方的“后退”按钮,可以返回上一级目录。
复制/粘贴
长按文件(文件夹),会提供四种操作,点击最上方的“复制”会复制该文件(文件夹)。
之后可以在本目录下或其他目录下长按其他文件,点击操作中的“粘贴”会将该文件(文件夹)复制到该目录下。若复制的为文件夹,文件夹目录下的文件一同复制。
效果1效果2
属性
长按文件(文件夹),会提供四种操作,点击“属性”会显示该文件(文件夹)的属性。
删除
长按文件(文件夹),会提供四种操作,点击“删除”会删除当前文件(文件夹)。若删除的为文件夹,文件夹目录下的所有文件一并删除。
格式化
点击最下方红色按键“格式化”,会将当前磁盘内所有内容删除。
退出系统
点击右上方的“×”可以从平台上完全退出当前文件管理系统。
1.4 注意事项
二、概述2.1 基本思路
该文件操作管理项目在存储空间管理上采取的是显式链接,在空闲空间管理上采用的是位图,在文件目录上采用的是多级结构。
2.2 主要文件三、具体实现3.1 FCB
在该项目中引用了文件管理系统中FCB的概念,即文件控制块,其中包含了每个文件(文件夹)的一些状态以及一些属性:
该项目中比较重要的是FCB临时存储器arr,该存储器存储着当前目录下的文件(文件夹)的FCB。当更改当前目录时,会将arr内容赋值给树型目录结构,同时arr会清空;当添加文件(文件夹)时,arr会增加相应内容。
3.2 磁盘空间申请
getAvailableInternalMemorySize(this);
通过该函数向操作系统申请一定的空间作为文件存储器,在其上实现该项目。
3.3 将文件内容保存到磁盘上
读操作,利用系统自带的轻量级存储器将存储在其中的根节点取出,并获得其子节点。
写操作,首先将当前页面状态进行保存,之后将根节点保存到存储器中以便下次取出。
3.4 多级目录结构
利用java构造树型多级目录结构。在打开app时先判断存储器中是否有根节点的值,若有直接取出作为当前根节点,若没有则建立新的根节点。
根节点的子节点为第一级目录结构下的文件(文件夹),每级目录结构下的文件(文件夹)之间通过左右兄弟节点相连接,并且每个文件(文件夹)都有其相应的父节点。对于文件夹,有一组子节点可以动态添加,而普通的文件则没有。这样的树型结构实现了快速查找文件的功能。
每次在目录文件夹下添加文件(文件夹)时,利用实现。代表当前指针位置,始终指向当前文件目录的最后一个文件,添加文件(文件夹)时,会为当前节点建立左兄弟节点,并将添加的节点与其相连,同时连接到父节点。
在每次点击文件夹进入下一级目录时,会置空,而点击的文件夹会作为当前目录的父节点,所有操作都建立在该父节点的子节点上。
3.5 复制/粘贴
复制操作比较简单java 文件大小格式化 基于Android实现的文件系统模拟,只需将选中的文件(文件夹)的FCB赋值给,用于记录被复制的文件(文件夹)。
粘贴操作分为是文件或文件夹,首先要查看当前目录下是否存在重名的文件(文件夹)。若存在,在粘贴时将其FCB内容的文件名进行修改,为其后面添加粘贴次数。若不存在,则直接将该FCB添加到当前目录的arr(FCB临时存储器)中。
3.6 属性查看
展示FCB内容,包括文件名、文件类型、创建日期、大小以及文件位置。
3.7 删除
点击删除后,将选中的文件(文件夹)从视图中删除,并标志该FCB采取过删除操作,并且将其从FCB临时存储器arr中删除,在更换目录时将arr内容更新到树型目录结构中。
删除操作的具体操作为函数,从树型目录结构中删除节点,同时判断该节点左右是否存在其他节点,若存在则将左右节点相连接,或将左节点或右节点的兄弟节点置为空。
3.8 磁盘格式化
磁盘格式化相当于第一次打开该文件管理系统的操作,将所有值重新赋值,、、arr置空,为新建根节点。
3.9 更换目录
在点击文件夹进入下一级目录时,会将当前目录的FCB寄存器arr内容赋值给同级的树型目录,赋值完后清空arrjava 文件大小格式化,并且将父节点改为点击的文件夹,当前节点置空,修改目录框内容。再进行判断,判断下一级目录中是否存在已建立的文件或文件夹,若有,则将其添加到arr中并更新视图。
在点击返回按钮进入上一级目录时,采取同样的操作,将arr内容赋值给同级的树型目录,清空arr和更新视图等,不同之处在于将改为父节点。
3.10 新建文件(文件夹)
新建操作比较简单,每次新建时会将文件(文件夹)的属性赋值给其FCB,文件名由用户输入得到,建立日期通过获得当前系统时间得到,文件类型由用户选择得到,文件大小初始值为0B。
3.11 读文件/写文件
读文件,点击文本文件时会自动弹出对话框,对话框上方字体为文本文件内容。
如果需要写内容到文本文件中,可以在输入框输入后,点击“保存”(将输入框内容追加到文本后方)或“重新保存”(将输入框内容覆盖文本)进行写文件操作。
四、总结
这次的项目主要是学习文件管理系统知识中的只是,其中涉及的知识点包括文件物理结构的存放方式、文件控制块FCB、树型目录结构以及通过位示图对空闲空间的管理。通过这次项目不仅是对操作系统中这一方面的知识点了解更深,对使用java建立多级树、管理位图有了更多的了解。
项目中出现了一些问题,偶尔会发生UI更新无法同步的问题,即在当前页面删去文件(文件夹)后,当第一次跳转回该界面时,有极小的概率文件(文件夹)还存在当前目录下,但第二次跳转回该界面时,被删的文件(文件夹)已经消失。通过调试,文件(文件夹)的确已被删除,发生的错误可能是由于UI无法及时同步更新。项目中面临最大的问题就是多级目录树的构造,由于java没有指针,构造多级树比较麻烦,于是我在父节点和子节点、兄弟节点之间建立双向连接,这样更便于查找。