操作系统课程设计 为LINUX 设计一个简单的二级文件系统 java实现界面Word格式.docx
《操作系统课程设计 为LINUX 设计一个简单的二级文件系统 java实现界面Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计 为LINUX 设计一个简单的二级文件系统 java实现界面Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
1题目分析
为Linux设计一个简单的二级文件系统,可以实现用户登录、列出文件目录、创建目录、创建文件、删除目录、删除文件、读取文件的功能。
本次设计采用的开发语言是Java,通过Java来实现整体布局和实现相关的功能。
2算法设计
本次二级文件系统主要分为五大模块,分别是用户登录模块、新建目录模块、新建文件模块、删除文件模块和读取文件模块。
用户登录成功后才可以进行其他模块的操作。
2.1用户登录模块
用户登录模块要求用户输入账号与密码,当输入正确后进入主视图并能进行其他模块操作,否则提示账号密码错误并要求用户重新输入(默认的账号和密码都是“123”)。
用户登录模块流程图如图1所示。
图1用户登录模块流程图
2.2新建目录模块
新建目录模块是根据用户鼠标右击时选择到的节点来确定节点的名字与路径,然后判断该节点是否可以拥有子节点,若拥有则根据用户输入的目录名称新建一个目录,否则提示不能新增目录。
新建目录模块流程图如图2所示。
图2新建目录流程图
2.3新建文件模块
新建文件模块是根据用户鼠标右击时选择到的节点来确定节点的名字与路径,然后判断该节点是否可以拥有子节点,若拥有则根据用户输入的文件名称新建一个文件,否则提示不能新增文件。
新建文件模块流程图如图3所示。
图3新建文件流程图
2.4删除文件模块
删除文件模块是根据用户鼠标右击时选择到的节点来确定要删除节点的名字与路径,然后判断该节点是目录还是文件。
若是文件则直接删除文件,若是目录则进入该目录再删除其全部文件。
删除文件模块流程图如图4所示。
图4删除文件模块流程图
2.5读取文件模块
读取文件模块是根据FileDialog类中事先设定的默认路径而打开一个选择对话框,然后根据用户选择的文件而获取文件的名字与路径。
最后通过输入流而把读取到的数据显示在一个文本域中。
读取文件流程图如图5所示。
图5读取文件模块流程图
3设计实现
3.1登录界面外观布局
登录界面主要代码:
JLabellabelID=null,labelPassword=null,title=null;
JTextFieldid,password;
JButtonconform=newJButton("
确认"
);
JButtoncancle=newJButton("
取消"
LoginWindow(){
init();
this.setTitle("
登录界面"
this.setBounds(400,200,550,400);
this.setResizable(false);
this.setVisible(true);
}
voidinit(){
this.setLayout(null);
labelID=newJLabel("
请输入账号:
"
labelID.setBounds(50,100,100,30);
this.add(labelID);
labelPassword=newJLabel("
请输入密码:
labelPassword.setBounds(50,200,100,30);
this.add(labelPassword);
id=newJTextField(20);
id.setBounds(170,100,300,30);
this.add(id);
password=newJTextField(20);
password.setBounds(170,200,300,30);
this.add(password);
title=newJLabel("
conform.setBounds(100,280,80,30);
cancle.setBounds(250,280,80,30);
conform.addActionListener(newLoginListener());
cancle.addActionListener(newLoginListener());
this.add(conform);
this.add(cancle);
登录界面如图6所示
图6登录界面
3.2树状显示目录
登录成功后显示默认路径的树状文件目录的主要代码:
voidgetRoot(DefaultMutableTreeNodesuperroot,Filef){
Filefiles[]=f.listFiles();
for(inti=0;
i<
files.length;
i++){
DefaultMutableTreeNodede=newDefaultMutableTreeNode(files[i].getName());
if(files[i].isDirectory()){
de.setAllowsChildren(true);
}
else{
de.setAllowsChildren(false);
System.out.println("
不是目录的有:
+de.toString());
superroot.add(de);
}
privateclassTreeListenerimplementsTreeExpansionListener{
//重写两个方法
publicvoidtreeCollapsed(TreeExpansionEventevent){
publicvoidtreeExpanded(TreeExpansionEventevent){
DefaultMutableTreeNodenode=(DefaultMutableTreeNode)(event
.getPath()).getLastPathComponent();
if(node.getChildCount()==0){
DefaultMutableTreeNodeoriginalNode=node;
StringfileName=node.toString();
while(node.getParent()!
=null){
node=(DefaultMutableTreeNode)node.getParent();
fileName=node.toString()+"
\\"
+fileName;
System.out.println("
当前展开路径名"
+fileName);
}
if(originalNode!
Filef=newFile(fileName);
if(f.isDirectory()){
Filefiles[]=f.listFiles();
if(files!
=null)
for(inti=0;
DefaultMutableTreeNodedmtn=newDefaultMutableTreeNode(
files[i].getName());
if(files[i].isDirectory())
dmtn.setAllowsChildren(true);
else
dmtn.setAllowsChildren(false);
dtm.insertNodeInto(dmtn,originalNode,
originalNode.getChildCount());
}
}
树状目录显示如图7所示:
图7树状显示目录
3.3新建目录实现主要代码:
privateclassNewMenuActionimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
TreePathpath=tree.getSelectionPath();
MutableTreeNodenode=(MutableTreeNode)path
.getLastPathComponent();
DefaultTreeModelmodel=(DefaultTreeModel)tree.getModel();
if(node.getAllowsChildren()){
StringName=JOptionPane.showInputDialog(null,"
创建目录名称:
if(!
Name.equals("
)){
MutableTreeNodenewNode=newDefaultMutableTreeNode(Name);
//建立新节点
tree.fireTreeExpanded(path);
model.insertNodeInto(newNode,node,0);
StringfullPath="
;
for(Objectobj:
path.getPath()){
Stringstr=obj.toString();
if(str.endsWith("
))
str=str.substring(0,str.length()-1);
if(fullPath.equals("
fullPath+=str;
else
fullPath+="
+str;
FileparentDir=newFile(fullPath);
if(parentDir.isDirectory()){
FilecurrentFile=newFile(fullPath+"
+Name);
currentFile.mkdir();
}else{
JOptionPane.showMessageDialog(null,"
目录名不能为空"
}else{
JOptionPane.showMessageDialog(null,"
不能给文件追加下级目录!
return;
}
}
新建目录如图8所示,
图8新建目录
3.4新建文件实现
新建文件主要代码:
privateclassNewFileActionimplementsActionListener{
StringfullPath="
for(Objectobj:
Stringstr=obj.toString();
if(str.endsWith("
str=str.substring(0,str.length()-1);
if(fullPath.equals("
fullPath+=str;
else
fullPath+="
StringFileName=JOptionPane.showInputDialog(null,"
创建文件名称:
FileName.equals(null)){
Filef=newFile(fullPath+"
+FileName);
try{
f.createNewFile();
}catch(IOExceptione1){
e1.printStackTrace();
不能添加文件!
return;
新建文件如图9所示,
图9新建文件
3.5删除文件实现
删除文件主要代码:
privateclassDeleteActionimplementsActionListener{
TreePathtp=tree.getSelectionPath();
DefaultMutableTreeNodenode=
(DefaultMutableTreeNode)tp.getLastPathComponent();
DefaultTreeModeldtm=(DefaultTreeModel)tree.getModel();
dtm.removeNodeFromParent(node);
StringfullPath="
for(Objectobj:
tp.getPath()){
Stringstr=obj.toString();
if(str.endsWith("
str=str.substring(0,str.length()-1);
if(fullPath.equals("
fullPath+=str;
else
fullPath+="
FilecurrentFile=newFile(fullPath);
if(currentFile.isFile())
currentFile.delete();
else
deleteDir(currentFile);
publicstaticbooleandeleteDir(Filedir){
if(dir.isDirectory()){
String[]subDir=dir.list();
for(Strings:
subDir){
deleteDir(newFile(dir,s));
returndir.delete();
删除文件如图10所示:
图10删除文件
3.6读取文件实现
读取文件主要代码:
voidreadFile(){
fileDialog=newJFileChooser("
F:
intstate=fileDialog.showOpenDialog(null);
if(state==JFileChooser.APPROVE_OPTION){
try{
Filedir=fileDialog.getCurrentDirectory();
Stringname=fileDialog.getSelectedFile().getName();
Filefile=newFile(dir,name);
//创建一新文件
fw=newFileReader(file);
br=newBufferedReader(fw);
Strings=null;
this.setTitle(name);
jta.setText("
"
//清空文本区的内容
while((s=br.readLine())!
jta.append(s+"
\n"
br.close();
}catch(Exceptione1){
e1.printStackTrace();
读取文件如图11所示:
图11读取文件
4设计总结
对于本次操作系统课程设,由于对树状显示目录这样面的内容比较陌生,刚起步阶段花了很大时间去查阅各种资料。
当完成设计时,感觉掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识。
比如对树的展示有了很好的学习,对二级文件系统也有了很好的了解,熟练Java布局的使用,如何解决实现里面功能的各种问题。
本次设计集树、监听器、布局、输入输出流、文件系统这几方面的知识而成,具有一定挑战性。
5参考文献
[1]李刚.疯狂Java讲义.电子工业出版社出版社,2008.
[2]耿祥义,张跃平.Java面向对象程序设计.清华大学出版社出版社,2009.