1、1题目分析为Linux设计一个简单的二级文件系统,可以实现用户登录、列出文件目录、创建目录、创建文件、删除目录、删除文件、读取文件的功能。本次设计采用的开发语言是Java,通过Java来实现整体布局和实现相关的功能。2算法设计 本次二级文件系统主要分为五大模块,分别是用户登录模块、新建目录模块、新建文件模块、删除文件模块和读取文件模块。用户登录成功后才可以进行其他模块的操作。 2.1 用户登录模块 用户登录模块要求用户输入账号与密码,当输入正确后进入主视图并能进行其他模块操作,否则提示账号密码错误并要求用户重新输入(默认的账号和密码都是“123”)。用户登录模块流程图如图1所示。图1 用户登录
2、模块流程图 2.2 新建目录模块 新建目录模块是根据用户鼠标右击时选择到的节点来确定节点的名字与路径,然后判断该节点是否可以拥有子节点,若拥有则根据用户输入的目录名称新建一个目录,否则提示不能新增目录。新建目录模块流程图如图2所示。图2 新建目录流程图 2.3新建文件模块 新建文件模块是根据用户鼠标右击时选择到的节点来确定节点的名字与路径,然后判断该节点是否可以拥有子节点,若拥有则根据用户输入的文件名称新建一个文件,否则提示不能新增文件。新建文件模块流程图如图3所示。图3 新建文件流程图 2.4 删除文件模块 删除文件模块是根据用户鼠标右击时选择到的节点来确定要删除节点的名字与路径,然后判断该
3、节点是目录还是文件。若是文件则直接删除文件,若是目录则进入该目录再删除其全部文件。删除文件模块流程图如图4所示。图4 删除文件模块流程图 2.5 读取文件模块 读取文件模块是根据FileDialog类中事先设定的默认路径而打开一个选择对话框,然后根据用户选择的文件而获取文件的名字与路径。最后通过输入流而把读取到的数据显示在一个文本域中。读取文件流程图如图5所示。图5 读取文件模块流程图3 设计实现 3.1登录界面外观布局 登录界面主要代码: JLabel labelID=null,labelPassword=null,title=null; JTextField id,password; JB
4、utton conform=new JButton(确认); JButton cancle=new JButton(取消 LoginWindow() init(); this.setTitle(登录界面 this.setBounds(400,200,550,400); this.setResizable(false); this.setVisible(true); void init() this.setLayout(null); labelID=new JLabel(请输入账号: labelID.setBounds(50, 100, 100, 30); this.add(labelID);
5、labelPassword=new JLabel(请输入密码: labelPassword.setBounds(50, 200, 100, 30); this.add(labelPassword); id=new JTextField(20); id.setBounds(170, 100, 300,30); this.add(id); password=new JTextField(20); password.setBounds(170, 200, 300, 30); this.add(password); title=new JLabel( conform.setBounds(100, 28
6、0, 80, 30); cancle.setBounds(250, 280, 80, 30); conform.addActionListener(new LoginListener(); cancle.addActionListener(new LoginListener(); this.add(conform); this.add(cancle);登录界面如图6所示图6 登录界面 3.2树状显示目录 登录成功后显示默认路径的树状文件目录的主要代码:void getRoot(DefaultMutableTreeNode superroot, File f) File files = f.li
7、stFiles(); for (int i = 0; i files.length; i+) DefaultMutableTreeNode de = new DefaultMutableTreeNode(filesi.getName(); if (filesi.isDirectory() de.setAllowsChildren(true); else de.setAllowsChildren(false); System.out.println(不是目录的有: + de.toString(); superroot.add(de); private class TreeListener imp
8、lements TreeExpansionListener / 重写两个方法 public void treeCollapsed(TreeExpansionEvent event) public void treeExpanded(TreeExpansionEvent event) DefaultMutableTreeNode node = (DefaultMutableTreeNode) (event .getPath().getLastPathComponent(); if (node.getChildCount() = 0) DefaultMutableTreeNode original
9、Node = node; String fileName = node.toString(); while (node.getParent() != null) node = (DefaultMutableTreeNode) node.getParent(); fileName = node.toString() + + fileName; System.out.println(当前展开路径名 + fileName); if (originalNode ! File f = new File(fileName); if (f.isDirectory() File files = f.listF
10、iles(); if (files != null) for (int i = 0; DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode( filesi.getName(); if (filesi.isDirectory() dmtn.setAllowsChildren(true); else dmtn.setAllowsChildren(false); dtm.insertNodeInto(dmtn, originalNode, originalNode.getChildCount(); 树状目录显示如图7所示:图7 树状显示目录
11、 3.3新建目录实现主要代码:private class NewMenuAction implements ActionListener public void actionPerformed(ActionEvent e) TreePath path = tree.getSelectionPath(); MutableTreeNode node = (MutableTreeNode) path .getLastPathComponent();DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); if (node.getAllo
12、wsChildren() String Name = JOptionPane.showInputDialog(null, 创建目录名称: if (!Name.equals() MutableTreeNode newNode = new DefaultMutableTreeNode(Name);/ 建立新节点 tree.fireTreeExpanded(path); model.insertNodeInto(newNode, node, 0); String fullPath = ; for (Object obj : path.getPath() String str = obj.toStri
13、ng(); if (str.endsWith() str = str.substring(0, str.length() - 1); if (fullPath.equals( fullPath += str; else fullPath += + str; File parentDir = new File(fullPath); if (parentDir.isDirectory() File currentFile = new File(fullPath + + Name); currentFile.mkdir(); else JOptionPane.showMessageDialog(nu
14、ll, 目录名不能为空 else JOptionPane.showMessageDialog(null, 不能给文件追加下级目录! return; 新建目录如图8所示,图8 新建目录 3.4新建文件实现 新建文件主要代码:private class NewFileAction implements ActionListener String fullPath = for (Object obj : String str = obj.toString(); if (str.endsWith( str = str.substring(0, str.length() - 1); if (fullPa
15、th.equals( fullPath += str; else fullPath += String FileName = JOptionPane.showInputDialog(null, 创建文件名称:FileName.equals(null) File f = new File(fullPath + + FileName); try f.createNewFile(); catch (IOException e1) e1.printStackTrace();不能添加文件!return; 新建文件如图9所示,图9 新建文件3.5删除文件实现 删除文件主要代码:private class
16、DeleteAction implements ActionListener TreePath tp = tree.getSelectionPath(); DefaultMutableTreeNode node = (DefaultMutableTreeNode) tp.getLastPathComponent(); DefaultTreeModel dtm = (DefaultTreeModel) tree.getModel(); dtm.removeNodeFromParent(node); String fullPath = for (Object obj : tp.getPath()
17、String str = obj.toString(); if (str.endsWith( str = str.substring(0, str.length() - 1); if (fullPath.equals( fullPath += str; else fullPath += File currentFile = new File(fullPath); if (currentFile.isFile() currentFile.delete(); else deleteDir(currentFile); public static boolean deleteDir(File dir)
18、 if (dir.isDirectory() String subDir = dir.list(); for (String s : subDir) deleteDir(new File(dir, s); return dir.delete();删除文件如图10所示:图10 删除文件 3.6读取文件实现 读取文件主要代码:void readFile() fileDialog = new JFileChooser(F: int state = fileDialog.showOpenDialog(null); if (state = JFileChooser.APPROVE_OPTION) try
19、 File dir = fileDialog.getCurrentDirectory(); String name = fileDialog.getSelectedFile().getName(); File file = new File(dir, name);/ 创建一新文件fw = new FileReader(file); br = new BufferedReader(fw); String s = null; this.setTitle(name); jta.setText( / 清空文本区的内容 while (s = br.readLine() ! jta.append(s +
20、n br.close(); catch (Exception e1) e1.printStackTrace();读取文件如图11所示:图11 读取文件4设计总结对于本次操作系统课程设,由于对树状显示目录这样面的内容比较陌生,刚起步阶段花了很大时间去查阅各种资料。当完成设计时,感觉掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识。比如对树的展示有了很好的学习,对二级文件系统也有了很好的了解,熟练Java布局的使用,如何解决实现里面功能的各种问题。本次设计集树、监听器、布局、输入输出流、文件系统这几方面的知识而成,具有一定挑战性。5参考文献1 李刚.疯狂Java讲义. 电子工业出版社出版社,2008.2 耿祥义,张跃平.Java面向对象程序设计.清华大学出版社出版社,2009.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1