操作系统作业 - 文件管理 - 模拟文件管理系统
操作系统作业-模拟文件管理系统
文末有源码
文章目录
- 操作系统作业-模拟文件管理系统
- 1. 项目需求
- 1.1 基本任务
- 1.2 功能描述
- 1.3 项目目的
- 2. 开发环境
- 3. 项目结构
- 4. 系统分析
- 4.1 显示链接法
- 4.2 位图、FAT表
- 5. 系统设计及实现
- 5.1 组件设计
- 5.2 功能实现
- 5.2.1 创建文件
- 5.2.2 删除文件
- 5.2.3 重命名
- 5.2.4 打开文件
- 5.2.5 格式化
- 6. 功能展示及详细操作说明
- 6.1 创建文件
- 6.2 创建文件夹
- 6.3 格式化
- 6.4 删除文件夹
- 6.5 删除文件
- 6.6 重命名
- 6.7 打开文件
- 6.8 搜索文件
- 7. 源码
1. 项目需求
1.1 基本任务
在内存中开辟一个空间作为文件存储器,在其上实现一个简单的文件系统。
退出这个文件系统时,需要该文件系统的内容保存到磁盘上,以便下次可以将其恢复到内存中来。
1.2 功能描述
- 文件存储空间管理可采取显式链接(如FAT)或者其他方法。(即自选一种方法)
- 空闲空间管理可采用位图或者其他方法。如果采用了位图,可将位图和FAT表合二为一。
- 文件目录采用多级目录结构。至于是否采用索引节点结构,自选。目录项目中应包含:文件名、物理地址、长度等信息。同学可在这里增加一些其他信息。
- 文件系统提供的操作:
- 格式化
- 创建子目录
- 删除子目录
- 显示目录
- 更改当前目录
- 创建文件
- 打开文件
- 关闭文件
- 写文件
- 读文件
- 删除文件
1.3 项目目的
- 熟悉文件存储空间的管理;
- 熟悉文件的物理结构、目录结构和文件操作;
- 熟悉文件系统管理实现;
- 加深对文件系统内部功能和实现过程的理解
2. 开发环境
- 开发环境: Windows 10
- 开发软件: Eclipse
- 开发语言: JavaSE (jdk1.8.0_241)
- 开发工具包: Swing
3. 项目结构
│ MyFileSystem.exe
│ MyFileSystem.jar
│ README.md
│ README.pdf
│ 模拟文件管理系统-设计方案报告.pdf
│
├─myFileSystem(模拟系统文件夹,请勿删除)
│ │ ReadMe.txt
│ │
│ ├─1
│ │ 1BitMap&&Fat.txt
│ │ recover.txt
│ │
│ ├─2
│ │ 2BitMap&&Fat.txt
│ │ recover.txt
│ │
│ ├─3
│ │ 3BitMap&&Fat.txt
│ │ recover.txt
│ │
│ ├─4
│ │ 4BitMap&&Fat.txt
│ │ recover.txt
│ │
│ ├─5
│ │ 5BitMap&&Fat.txt
│ │ recover.txt
│ │
│ ├─6
│ │ 6BitMap&&Fat.txt
│ │ mojito.txt
│ │ recover.txt
│ │
│ ├─7
│ │ 7BitMap&&Fat.txt
│ │ recover.txt
│ │
│ ├─8
│ │ 8BitMap&&Fat.txt
│ │ recover.txt
│ │
│ └─9
│ 9BitMap&&Fat.txt
│ recover.txt
│
└─src├─image│ document.png│ folder.png│├─Java│ Folder.java│ myFiles.java│ MyFileSystem.java│ tableModel.java│└─myFileSystem
4. 系统分析
4.1 显示链接法
本文件系统中, 文件存储空间管理使用显示链接的方法,文件中的内容存放在磁盘不同的块中,每次创建文件时为文件分配数量合适的空闲块。每次写文件时按顺序将文件内容写在相应块中; 删除文件时将原先有内容的位置置为空即可。
4.2 位图、FAT表
磁盘空闲空间管理在位图的基础上进行改造,将存放磁盘上文件位置信息的FAT表与传统的位图进行结合,磁盘空闲的位置使用0
标识,放有文件的盘块存放文件所在的下一个盘块的位置,文件存放结束的盘块位置使用1
标识。
5. 系统设计及实现
5.1 组件设计
- 文件树:
Java.Swing.JTree
- 文件表:
Java.Swing.JTable
- 搜索板块
- 搜索框:
Java.Swing.JTextField
- 提示语:
Java.Swing.JLabel
- 按钮:
Java.Swing.JButton
- 搜索框:
- 详细信息展示条:
Java.Swing.JLabel
5.2 功能实现
5.2.1 创建文件
通过调用File
类的createFile()
来实现,创建后刷新FAT和位图,如果虚拟存储空间不够则会提示创建失败
JMenuItem createFileItem = new JMenuItem("新建文件");
createFileItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {DefaultMutableTreeNode node =(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();myFiles temp = (myFiles) node.getUserObject();int blokName = temp.getBlockName();Folder currentBlock = folders.get(blokName - 1);String inputValue;double capacity;JOptionPane inputPane = new JOptionPane();inputPane.setPreferredSize(new Dimension(600, 600));inputPane.setInputValue(JOptionPane.showInputDialog("文件名:"));if (inputPane.getInputValue() == null) {return;}inputValue = inputPane.getInputValue().toString();inputPane.setInputValue(JOptionPane.showInputDialog("文件大小(KB):"));if (inputPane.getInputValue() == null) {return;}capacity = Double.parseDouble(inputPane.getInputValue().toString());File newFile = new File(temp.getFilePath() + File.separator + inputValue + ".txt");if (!newFile.exists() && !inputValue.equals(null)) {try {if (currentBlock.createFile(newFile, capacity)) {DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(new myFiles(newFile, blokName, capacity));model.removeRows(0, model.getRowCount());model.addRow(new myFiles(newFile, blokName, capacity));fileTable.updateUI();upDateBlock(currentBlock);JOptionPane.showMessageDialog(null, "创建成功!请刷新文件夹!", "Success", JOptionPane.DEFAULT_OPTION);}} catch (IOException e1) {JOptionPane.showMessageDialog(null, "创建失败!!!", "Error", JOptionPane.ERROR_MESSAGE);}}}
});
myMenu.add(createFileItem);
5.2.2 删除文件
通过调用File
类的delete()
来实现,对于文件夹,需要先递归调用删除函数将文件删除后再删文件夹本身,删除成功后刷新FAT和位图
JMenuItem deleteItem = new JMenuItem("删除");
deleteItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();myFiles temp = (myFiles) node.getUserObject();int blokName = temp.getBlockName();Folder currentBlock = folders.get(blokName - 1);int choose = JOptionPane.showConfirmDialog(null, "确定删除?", "confirm", JOptionPane.YES_NO_OPTION);if (choose == 0) {if (currentBlock.deleteFile(temp.getMyFile(), temp.getSpace())) {try {currentBlock.rewriteBitMap();currentBlock.rewriteRecoverWriter();} catch (IOException e1) {e1.printStackTrace();}upDateBlock(currentBlock);JOptionPane.showMessageDialog(null, "删除成功,请刷新文件夹!", "Success", JOptionPane.DEFAULT_OPTION);} else {JOptionPane.showMessageDialog(null, "删除失败!!!", "Error", JOptionPane.ERROR_MESSAGE);}}}
});
myMenu.add(deleteItem);
5.2.3 重命名
通过调用File类的renameTo()
方法进行重命名,如果相同目录下有相同的文件,则重命名将会失败。
JMenuItem renameItem = new JMenuItem("重命名");
renameItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();myFiles temp = (myFiles) node.getUserObject();int blokName = temp.getBlockName();Folder currentBlock = folders.get(blokName - 1);String inputValue = null;JOptionPane inputPane = new JOptionPane();inputPane.setInputValue(JOptionPane.showInputDialog("新的文件名:"));if (inputPane.getInputValue() == null) {return;}inputValue = inputPane.getInputValue().toString();try {currentBlock.renameFile(temp.getMyFile(), inputValue, temp.getSpace());JOptionPane.showMessageDialog(null, "重命名成功,请刷新文件夹", "Success", JOptionPane.DEFAULT_OPTION);} catch (IOException e1) {JOptionPane.showMessageDialog(null, "重命名失败!!!", "Error", JOptionPane.ERROR_MESSAGE);}}
});
myMenu.add(renameItem);
5.2.4 打开文件
双击程序右侧显示面板中的文件即可打开对应文件,通过对鼠标操作加监听来实现
fileTable.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {String fileName = ((String) model.getValueAt(fileTable.getSelectedRow(), 0));String filePath = ((String) model.getValueAt(fileTable.getSelectedRow(), 1));try {if (Desktop.isDesktopSupported()) {Desktop desktop = Desktop.getDesktop();desktop.open(new File(filePath));}} catch (IOException e1) {JOptionPane.showMessageDialog(null, "抱歉,出了一些错误!", "Fail to open", JOptionPane.ERROR_MESSAGE);}JOptionPane.showMessageDialog(null, "File Name: " + fileName + "\n File Path: " + filePath,"content", JOptionPane.INFORMATION_MESSAGE);}}
});
5.2.5 格式化
先递归删除该目录下的所有文件,然后更新位图和FAT
JMenuItem formatItem = new JMenuItem("格式化");
formatItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();myFiles temp = (myFiles) node.getUserObject();int blokName = temp.getBlockName();Folder currentBlock = folders.get(blokName - 1);int choose = JOptionPane.showConfirmDialog(null, "确定格式化文件夹吗?", "confirm", JOptionPane.YES_NO_OPTION);if (choose == 0) {try {if (temp.getMyFile().isDirectory()) {for (File myfile : temp.getMyFile().listFiles()) {currentBlock.deleteFile(myfile, getSpace(myfile));}upDateBlock(currentBlock);JOptionPane.showMessageDialog(null, "格式化成功,请刷新文件夹!", "Success", JOptionPane.DEFAULT_OPTION);currentBlock.rewriteBitMap();}} catch (Exception E1) {JOptionPane.showMessageDialog(null, "格式化失败!!!", "Error", JOptionPane.ERROR_MESSAGE);}}}
});
myMenu.add(formatItem);
6. 功能展示及详细操作说明
6.1 创建文件
在文件夹内双击运行
MyFileSystem.exe
,进入文件管理模拟系统如下图选中文件夹,右键显示操作列表,如下图所示
点击
新建文件夹
,在弹出的提示框内输入文件名,然后点击确定
输入文件大小,再次点击
确定
系统将提示新建文件成功,再次点击
确定
6.2 创建文件夹
右键召出菜单列表,点击
新建文件夹
在弹出的提示框内输入文件夹名称,然后点击
确定
系统提示创建成功,再次点击
确定
再次打开文件夹(示例中是文件夹6),文件夹创建成功
6.3 格式化
- 选定要格式化的文件夹,右键召出菜单列表,点击
格式化
在弹出的对话框汇中选择
是
或否
系统提示格式化成功,再次点击
确定
再次打开格式化后的文件夹,格式化成功
6.4 删除文件夹
选定要删除的文件夹,右键召出菜单列表
在弹出的对话框中选择
是
或否
系统弹出对话框提示删除成功
再次打开文件夹,删除成功
6.5 删除文件
选定要删除的文件,右键召出菜单列表,点击
删除
在弹出的系统对话框中选择
是
或否
选
是
则系统提示删除成功重新打开文件夹,删除成功
6.6 重命名
选中要重命名的文件或文件夹,右键召出菜单列表,选择重命名
在弹出的对话框中填上要修改的文件名,然后点击
确定
系统弹出对话框提示重命名成功
再次打开文件夹,重命名成功
6.7 打开文件
找到要打开的文件,双击文件表中的文件
6.8 搜索文件
在上方的搜索框中输入要搜索的文件或文件夹名称(注:文件名称格式为
myFile.txt
文件夹名称格式为6-1
)然后点击开始
系统找到文件后会自动打开文件
系统找不到文件则会弹出对话框提示查找失败
7. 源码
操作系统作业-文件管理-文件系统.zip
操作系统作业 - 文件管理 - 模拟文件管理系统相关推荐
- 作业:模拟银行管理系统
user class User:"""用户类"""def __init__(self,name,id,phone,card):"& ...
- 文件管理系统源代码c语言,文件管理系统源代码
操作系统课程设计之文件管理系统源代码,该代码能正确无误运行,显示正确结果,具有很大的参考学习价值. 文件管理系统 一.实验目的 通过设计一个多用户文件系统,了解操作系统中文件的组织与管理,熟悉文件管理 ...
- 项目策划 文件管理系统
文章目录 第一章 项目简介 1.1 项目基本信息 1.2 学习顺序 1.3 后期学习 1.4 技术要求 第二章 使用流程 2.1 登录模块 2.2 储存模块 2.3 读取模块 2.4 身份验证 2.5 ...
- linux文件管理课程设计,操作系统原理课程设计-Linux文件管理系统的仿真.doc
操作系统原理课程设计 实践报告 全套设计加扣 3012250582 题 目: Linux文件管理系统的仿真 姓 名: 学 院: 信息科学技术学院 专 业: 计算机科学技术系 班 级: 计科121 是否 ...
- android文件管理实现所应用到的技术,基于Android的文件管理系统的设计与实现
摘要: 现如今,移动信息化得到了不断的发展.在手机,掌上电脑等智能终端进行的随时随地的移动化办公方式,越来越得到人们的欢迎.Android是一款应用广泛的操作系统,在大量开发者的努力下,基于Andro ...
- 2007cad多个文件窗口上部排列_【中考信息技术总复习讲义】模块三 操作系统与文件管理...
模块三 操作系统与文件管理 学习目标 1.了解操作系统的概念.功能和分类,了解操作系统的发展. 2.熟练掌握Windows桌面.窗口.菜单.对话框的组成及常用操作. 3.掌握创建桌面快捷方式的方法和控 ...
- 操作系统之文件管理系统
操作系统之文件管理系统 一.初识文件管理 一.前景回顾 二.文件的属性 一个文件有哪些属性: 文件名:由创建文件的用户决定文件名,主要是为了方便找到用户找到文件,同一目录下不允许有重名文件. 标识符: ...
- 文件管理系统(操作系统)——9张思维导图
文件管理系统 1.文件管理 1.1.一个文件的逻辑结构 比如一个文本txt文件,又或者Excel文件,在我们用户看来,它是长什么样的,这个就是逻辑结构 几个概念 "逻辑结构",就是 ...
- python 文件管理系统为用户_操作系统中的文件管理系统为用户提供的功能是什么...
操作系统中的文件管理系统为用户提供的功能是按文件名管理文件,文件管理主要负责文件的存储.检索.共享和保护,为用户提供文件操作的方便. 操作系统中的文件管理系统为4 D R Y W 5用户提供的功能是按 ...
最新文章
- java 升级1.8_升级java到1.8.0_111
- 贪心算法--多处最优服务次序问题
- SSM:web目录下有的jsp和图片不能显示,有的可以显示的解决方法
- 连载:告诉你如何设计一个日访问量千万级别的系统,谈oracle的高级设计和开发(2)...
- CI Weekly #5 | 微服务架构下的持续部署与交付
- harmonyos2.0怎么更新,harmonyOS 2.0什么时候更新 harmonyOS 2.0手机开发者Beta版更新内容[多图]...
- select默认选中的option_技巧:MacOS 中 Option 键的隐藏功能
- 计算机图形学(二)——实验二:直线的生成算法
- step 7在win10上安装教程及安装包
- C语言 判断并输出完数
- ijk基于exo_github上十二款最著名的Android播放器开源项目
- python爬虫数据分析项目 双十一_Python爬取淘宝商品数据,价值千元的爬虫外包项目!...
- 网站蜘蛛日志如何分析?对优化有用吗?
- Android MultiDex实践:如何绕过那些坑?
- AutoJs学习-关于各种头条阅读自动赚金币的思路-实践中
- Web前端性能测试方法
- Matlab将数据写入文件
- 微信小程序使用图片标签出现白底
- matlab光顺拐点,Matlab的smooth方法(降噪\光顺\移动平均)
- eclipse项目中的.project文件
热门文章
- MOV指令、LDR指令、LDR伪指令之间的区别(ARM立即数的存取)
- 利用局部有界性求函数有界无界_20160331
- 探索推荐引擎内部的秘密系列文章
- 修改--案例 全部删除
- linux查看文件字节数
- 公众平台返回原始数据为: 错误代码-40164,错误信息-invalid ip, not in whitelist hint
- NoSQL 新贵之崛起的 Neo4j
- 在线练习题库python_有哪些 python 的在线练习题或编程挑战的网站?
- 经济危机 女人裙子的长短 ×××
- MySQL打开时在命令行输入密码后,按回车键闪退,快速解决方法