操作系统作业-模拟文件管理系统

文末有源码

文章目录

  • 操作系统作业-模拟文件管理系统
    • 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

操作系统作业 - 文件管理 - 模拟文件管理系统相关推荐

  1. 作业:模拟银行管理系统

    user class User:"""用户类"""def __init__(self,name,id,phone,card):"& ...

  2. 文件管理系统源代码c语言,文件管理系统源代码

    操作系统课程设计之文件管理系统源代码,该代码能正确无误运行,显示正确结果,具有很大的参考学习价值. 文件管理系统 一.实验目的 通过设计一个多用户文件系统,了解操作系统中文件的组织与管理,熟悉文件管理 ...

  3. 项目策划 文件管理系统

    文章目录 第一章 项目简介 1.1 项目基本信息 1.2 学习顺序 1.3 后期学习 1.4 技术要求 第二章 使用流程 2.1 登录模块 2.2 储存模块 2.3 读取模块 2.4 身份验证 2.5 ...

  4. linux文件管理课程设计,操作系统原理课程设计-Linux文件管理系统的仿真.doc

    操作系统原理课程设计 实践报告 全套设计加扣 3012250582 题 目: Linux文件管理系统的仿真 姓 名: 学 院: 信息科学技术学院 专 业: 计算机科学技术系 班 级: 计科121 是否 ...

  5. android文件管理实现所应用到的技术,基于Android的文件管理系统的设计与实现

    摘要: 现如今,移动信息化得到了不断的发展.在手机,掌上电脑等智能终端进行的随时随地的移动化办公方式,越来越得到人们的欢迎.Android是一款应用广泛的操作系统,在大量开发者的努力下,基于Andro ...

  6. 2007cad多个文件窗口上部排列_【中考信息技术总复习讲义】模块三 操作系统与文件管理...

    模块三 操作系统与文件管理 学习目标 1.了解操作系统的概念.功能和分类,了解操作系统的发展. 2.熟练掌握Windows桌面.窗口.菜单.对话框的组成及常用操作. 3.掌握创建桌面快捷方式的方法和控 ...

  7. 操作系统之文件管理系统

    操作系统之文件管理系统 一.初识文件管理 一.前景回顾 二.文件的属性 一个文件有哪些属性: 文件名:由创建文件的用户决定文件名,主要是为了方便找到用户找到文件,同一目录下不允许有重名文件. 标识符: ...

  8. 文件管理系统(操作系统)——9张思维导图

    文件管理系统 1.文件管理 1.1.一个文件的逻辑结构 比如一个文本txt文件,又或者Excel文件,在我们用户看来,它是长什么样的,这个就是逻辑结构 几个概念 "逻辑结构",就是 ...

  9. python 文件管理系统为用户_操作系统中的文件管理系统为用户提供的功能是什么...

    操作系统中的文件管理系统为用户提供的功能是按文件名管理文件,文件管理主要负责文件的存储.检索.共享和保护,为用户提供文件操作的方便. 操作系统中的文件管理系统为4 D R Y W 5用户提供的功能是按 ...

最新文章

  1. java 升级1.8_升级java到1.8.0_111
  2. 贪心算法--多处最优服务次序问题
  3. SSM:web目录下有的jsp和图片不能显示,有的可以显示的解决方法
  4. 连载:告诉你如何设计一个日访问量千万级别的系统,谈oracle的高级设计和开发(2)...
  5. CI Weekly #5 | 微服务架构下的持续部署与交付
  6. harmonyos2.0怎么更新,harmonyOS 2.0什么时候更新 harmonyOS 2.0手机开发者Beta版更新内容[多图]...
  7. select默认选中的option_技巧:MacOS 中 Option 键的隐藏功能
  8. 计算机图形学(二)——实验二:直线的生成算法
  9. step 7在win10上安装教程及安装包
  10. C语言 判断并输出完数
  11. ijk基于exo_github上十二款最著名的Android播放器开源项目
  12. python爬虫数据分析项目 双十一_Python爬取淘宝商品数据,价值千元的爬虫外包项目!...
  13. 网站蜘蛛日志如何分析?对优化有用吗?
  14. Android MultiDex实践:如何绕过那些坑?
  15. AutoJs学习-关于各种头条阅读自动赚金币的思路-实践中
  16. Web前端性能测试方法
  17. Matlab将数据写入文件
  18. 微信小程序使用图片标签出现白底
  19. matlab光顺拐点,Matlab的smooth方法(降噪\光顺\移动平均)
  20. eclipse项目中的.project文件

热门文章

  1. MOV指令、LDR指令、LDR伪指令之间的区别(ARM立即数的存取)
  2. 利用局部有界性求函数有界无界_20160331
  3. 探索推荐引擎内部的秘密系列文章
  4. 修改--案例 全部删除
  5. linux查看文件字节数
  6. 公众平台返回原始数据为: 错误代码-40164,错误信息-invalid ip, not in whitelist hint
  7. NoSQL 新贵之崛起的 Neo4j
  8. 在线练习题库python_有哪些 python 的在线练习题或编程挑战的网站?
  9. 经济危机 女人裙子的长短 ×××
  10. MySQL打开时在命令行输入密码后,按回车键闪退,快速解决方法