操作系统课程设计二级文件系统.docx
《操作系统课程设计二级文件系统.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计二级文件系统.docx(23页珍藏版)》请在冰豆网上搜索。
操作系统课程设计二级文件系统
学号
10225608129
武汉理工大学华夏学院
课程设计
课程名称操作系统课程设计
题目为LINUX设计一个简单的二级文件系统
专业软件技术
班级2081班
姓名赵然
成绩
指导教师赵传斌、司晓梅
2011年1月17日至2011年1月21日
课程设计任务书
设计题目:
为LINUX设计一个简单的二级文件系统
设计目的:
1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。
2、提高学生的程序设计能力、提高算法设计质量与程序设计素质。
设计任务:
(在规定的时间内完成下列任务)
为LINUX设计一个简单的二级文件系统。
要求做到以下几点:
1、可以实现下列几条命令(至少4条)
Login
用户登录
Dir
列文件目录
Create
创建文件
Delete
删除文件
Open
打开文件
Close
关闭文件
Read
读文件
Write
写文件
2、列目录时要列出文件名、物理地址、保护码和文件长度。
3、源文件可以进行读写保护。
时间安排:
1月17日布置课程设计任务;分配题目后,查阅资料、准备程序;
1月18日~1月20日上机调试程序、书写课程设计报告;
1月21日上午提交课程设计报告及相关文档。
地点:
学校机房(具体见现代教育中心大屏幕安排)
具体要求:
1、课程设计报告按统一通用格式书写,具体格式要求请在网络上查阅
2、每位学生应独立完成各自的任务且每天至少在设计室工作半天
指导教师签名:
11年1月7日
教研室主任(或责任教师)签名:
11年1月7日
1.实现原理
首先,实现Login用户登录,(用户名:
zhaoran密码:
1234)必须登录成功才能进入文件系统进行查看,进入后,通过树状展示文件目录(默认文件目录是C:
\ProgramFiles),右侧显示文件夹图标或者文件图标,选中节点鼠标右击弹出菜单,有新建目录,新建文件,删除文件,打开文件,属性菜单项,并分别实现其功能。
2.开发环境
开发工具MyEclipse7.0
开发语言Java
3.关键算法实现流程图
3.1流程图
3.2具体算法代码
3.2.1登陆模块
publicclassLoginextendsJFrame{
privatestaticfinallongserialVersionUID=1L;
privateJPaneljContentPane=null;
privateJLabeljLabel1=null;
privateJLabeljLabel2=null;
privateJLabeljLabel=null;
privateJTextFieldjTextField1=null;
privateJPasswordFieldjPasswordField=null;
privateJButtonjButton1=null;
privateJButtonjButton2=null;
privateJTextFieldgetJTextField1(){
if(jTextField1==null){
jTextField1=newJTextField();
jTextField1.setPreferredSize(newDimension(10,25));
jTextField1.setBounds(newRectangle(183,59,169,30));
}
returnjTextField1;
}
privateJPasswordFieldgetJPasswordField(){
if(jPasswordField==null){
jPasswordField=newJPasswordField();
jPasswordField.setBounds(newRectangle(183,99,169,30));
jPasswordField.addKeyListener(newjava.awt.event.KeyAdapter(){
publicvoidkeyPressed(java.awt.event.KeyEvente){
if(e.getKeyChar()==KeyEvent.VK_ENTER){
test();
}
}
});
}
returnjPasswordField;
}
publicstaticvoidmain(String[]args){
SwingUtilities.invokeLater(newRunnable(){
publicvoidrun(){
LoginthisClass=newLogin();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
publicLogin(){
super();
initialize();
}
privatevoidinitialize(){
this.setSize(400,250);
Dimensiond=Toolkit.getDefaultToolkit().getScreenSize();
Dimensionfsize=this.getSize();
this.setLocation((d.width-fsize.width)/2,(d.height-fsize.height)/2);
this.setContentPane(getJContentPane());
this.setTitle("二级文件系统");
}
privateJButtongetJButton2(){
if(jButton2==null){
jButton2=newJButton();
jButton2.setBounds(newRectangle(218,167,90,32));
jButton2.setText("取消");
jButton2.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
System.exit(0);
}
});
}
returnjButton2;
}
privateJPanelgetJContentPane(){
if(jContentPane==null){
jLabel=newJLabel();
jLabel.setText("密码:
");
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
jLabel.setBounds(newRectangle(27,101,132,29));
jLabel2=newJLabel();
jLabel2.setText("用户名:
");
jLabel2.setBounds(newRectangle(27,59,133,29));
jLabel2.setHorizontalAlignment(SwingConstants.CENTER);
jLabel2.setPreferredSize(newDimension(10,15));
jLabel1=newJLabel();
jLabel1.setText("登陆界面");
jLabel1.setFont(newFont("\u534e\u6587\u5b8b\u4f53",Font.BOLD,24));
jLabel1.setBounds(newRectangle(0,0,389,32));
jLabel1.setForeground(newColor(255,0,54));
jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
jContentPane=newJPanel();
jContentPane.setLayout(null);
jContentPane.add(jLabel1,null);
jContentPane.add(jLabel2,null);
jContentPane.add(jLabel,null);
jContentPane.add(getJTextField1(),null);
jContentPane.add(getJPasswordField(),null);
jContentPane.add(getJButton1(),null);
jContentPane.add(getJButton2(),null);
}
returnjContentPane;
}
privateJButtongetJButton1(){
if(jButton1==null){
jButton1=newJButton();
jButton1.setBounds(newRectangle(79,168,84,33));
jButton1.setText("确定");
jButton1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
test();
}
});
}
returnjButton1;
}
publicvoidtest(){
if(jTextField1.getText().equals("zhaoran")&&String.valueOf(jPasswordField.getPassword()).equals("1234")){
Stringaa[]={"aa","bb"};
Contents.main(aa);
setVisible(false);
}
else{
JOptionPane.showMessageDialog(Login.this,"输入错误!
!
请重新输入!
");
}
}
}
3.2.2新建文件目录
privateclassnewMenuActionimplementsActionListener{
publicvoidactionPerformed(ActionEventarg0){
try{
StringName=JOptionPane.showInputDialog("创建目录名称:
");
if(!
Name.equals("")){
TreePathpath=tree.getSelectionPath();
MutableTreeNodenode=(MutableTreeNode)path.getLastPathComponent();
DefaultTreeModelmodel=(DefaultTreeModel)tree.getModel();
MutableTreeNodenewNode=newDefaultMutableTreeNode(Name);
tree.fireTreeExpanded(path);
if(node.getAllowsChildren())model.insertNodeInto(newNode,node,0);
else{
JOptionPane.showMessageDialog(null,"不能给文件追加下级目录!
");
return;
}
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,"文件名不能为空!
");
}
}catch(HeadlessExceptione){
e.printStackTrace();
}
}
}
3.2.3新建文件
privateclassnewFileActionimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
TreePathtp=tree.getSelectionPath();
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+="\\"+str;
}
StringFileName=JOptionPane.showInputDialog("创建文件名称:
");
if(!
FileName.equals(null)){
Filef=newFile(fullPath+"\\"+FileName);
try{
f.createNewFile();
}catch(IOExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
}else{
JOptionPane.showMessageDialog(null,"文件名不能为空!
");
}
}
}
3.2.4删除功能
privateclassMenuActionimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
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+="\\"+str;
}
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();
}
3.2.5打开文件
publicclassOpen_File{
publicstaticvoidmain(String[]args){
DemoWindow2dw=newDemoWindow2("打开文件");
ToolkittheKit=dw.getToolkit();
DimensionwndSize=theKit.getScreenSize();
dw.setBounds(wndSize.width/3,wndSize.height/3,wndSize.width/3,wndSize.height/3);
dw.setVisible(true);
}
}
classDemoWindow2extendsJFrameimplementsActionListener,Runnable{
privatestaticfinallongserialVersionUID=1L;
JTextAreajta=newJTextArea();
intv=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
inth=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
JScrollPanejsp=newJScrollPane(jta,v,h);
JPaneljp1=newJPanel();
JButtonjb=newJButton("打开文件");
publicDemoWindow2(Stringtitle){
super(title);
jp1.add(jb);
add(jsp);
add(jp1,BorderLayout.SOUTH);
jb.addActionListener(this);
}
publicvoidactionPerformed(ActionEvente){
newThread(this).start();
}
publicvoidrun(){
jta.setText("");
JFileChooserjfc=newJFileChooser(System.getProperty("user.home"));
jfc.setFileFilter(newTXTFilter());
if(jfc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
Filefile=jfc.getSelectedFile();
if(file!
=null){
try{
FileInputStreamfis=newFileInputStream(file);
ProgressMonitorInputStreampmis=newProgressMonitorInputStream(
this,"读取进度",fis);
ProgressMonitorpm=pmis.getProgressMonitor();
pm.setMillisToDecideToPopup(10);
pm.setMillisToPopup(0);
byte[]readbyte=newbyte[10];
while(pmis.read(readbyte)>0){
jta.append(newString(readbyte,"GB2312"));
Thread.sleep(10);
if(pm.isCanceled()){
jta.append("\n\n终止读取文件!
");
}
}
pmis.close();
}catch(Exceptione){
System.out.println(e.getMessage());
}
}
}
}
}
classTXTFilterextendsFileFilter{
publicbooleanaccept(Filef){
if(f.isDirectory()){
returntrue;
}
String[]filePostfix={"txt"};
for