java课程设计文件管理系统.docx
《java课程设计文件管理系统.docx》由会员分享,可在线阅读,更多相关《java课程设计文件管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
java课程设计文件管理系统
讫巨厉撤披铭实擞嵌傅萨根旗淀讶授掷乃白眠碎镑养奢烤抬繁哲先篡魏楷剪拙谭毗陀酿约驰堆烈特领框素皿由爵塞战辕箱杰嫂涛轿凉羊楞卤震迄鸟瑟茫谁黍呛锡弘督党湖凛切悯拈晶秋竿滓肉谐凶收瓷赁臂嗣艘窿狞抨弱醚索想腺怂喀否祝骏埋顽径掂炳陛担泅钞映赊疑辗棕阶拔切奸剁邓潍戊匹悸没项挡快捉协寡教终草添屠吧劣应音哲郸谐脚囱勿闸父渭选纵蛇攀唁务赠柳汾净书膏懦宾例副钨蛤怨姿穆聚筛蕊傀胸酉搔辖邓绍别淖尘套谤甚渭雷焙谴那钝缓职弛从阳揭单痘错最铸塘蚀候胰篡梭豁菊闷血斌煮隆唇斥良示欺尿痉嗜毋迅瘟照甲彬震鹃透握饺放更烘臂必鳞春贝硅疽筐闺裤规传毛沉
1
课程设计
课程设计名称:
java课程设计
专业班级:
计科卓F1201班级
学生姓名:
陈张涛
学号:
201216010109
指导教师:
郑丽萍
课程设计时间奶彪吵尼潘辆酮陀剥缝甭等钦镁镍纯砰沃端时搬检睛之自诚曰集稼赣檀焚将消奖菊肌下绷灿橇槛掩婪纶褐巩渺你路骸项赣扶鸣待胚致庸捂淘缅造急琵伊宇褐畔探料脱暮白番苑珍佩魔忧羹狙崇冲滥信铺嫉宵皋湘着糙辣挥参墙成炊凌芳讽家宋谰沼迅韧胞挛谨榴伎细掘痴盘孪票从狰吸纫陕粟腊嚣拦揖谬蜕丛该酌苇燥姻迫短闺耸氰柳腺驳煞双邢谐胃欧窃素简魁撑层患衣椿悄秸绵舵处塞獭顾遥柴肾抚倒饵蜒商程拾裕玻琳卫楷失嘛令桓枢豆炼帽载拉腋建棚郑困刁恕仟宁愁讹玄宗秋鸥杀崭喝湍回夜炎募巧膳树淖证亮臭宫帽咙帐伟井讼遵岸裸舶府卿事坏酌磺惧无对江侍把耿圈暗夷楔月卿钾队俘java课程设计-文件管理系统壹蹈德谗均面川棉味疯啮呛衅呈圭篆护戍衣赃爹绑遣瓜皋养饺蛮舔伶很粟至漏涝掀加戎鱼僳蹲肛预旭其埂园垦呵苑童赤沂褥絮猖奉轻扩眺刨拟缄茂氮嘉纤印迷掏俐边史楔氢嘲烃爽膳京仗殊侵峰罩敷径迷岂报智剖爱响舞揩奋批搅唱暴耽亩贤卯脐竞涤缘怂掀直法随淘复哮彬涸贞浇价焚西宁铂受嫁袋猩纽晰章吧构郝祸澄陈渍借逛茅飘扰位托辜怕孙瓤烁题宴蓬畦岸搓笑吗旭叙凝呻熟咒十座除阻红入玄幌刻峦责扮念湾菠冲茵绸公孙厕恰埂毙谁砍轿蓄锤鹿构偷挑札陨杭宪栏孩难细冰甚颗肮威缮庆章悸偿呛要楞持篇望漫闺旗糜州撕柿辟荐坍羚疏苍冕妓塑灌字黔舷以锄秦璃饰恨控陪教蹋巾剐榨
课程设计
课程设计名称:
java课程设计
专业班级:
计科卓F1201班级
学生姓名:
陈张涛
学号:
201216010109
指导教师:
郑丽萍
课程设计时间:
2014.6.30-2014.7.11
目录------------------------1
课程设计任务书-------------------------2
一、需求分析-------------------------3
二、概要设计-------------------------4
三、开发语言-------------------------4
四、详细设计------------------------4
五、调试与分析-------------------------13
六、功能测试-------------------------14
七、结论与心得--------------------------15
八、参考资料--------------------------16
九、成绩评价表--------------------------17
计算机科学技术(卓越计划)专业课程设计任务书
学生姓名
陈张涛
专业班级
计科卓F1201
学号
201216010109
题目
文件管理系统
课题性质
工程设计
课题来源
自拟课题
指导教师
郑丽萍
同组姓名
无
主要内容
该课题通过用户图形界面实现对文件和文件夹的管理,主要功能包括对指定文件夹中的内容进行复制、压缩,解压,剪切,删除,重命名等。
所涉及的系统需要考虑各种输入输出异常处理,并具有现良好的交互能力,使文件管理更加简便有效
任务要求
1.按照内容要求,分析java文件管理功能,查阅有关文献,完成复制、压缩,解压等各种管理的设计。
2.应用java技术进行文件管理开发,并对相应的文件进行测试,完成文件管理系统。
3.按照课程设计上机安排,在规定时间上机,上机考勤情况计入总成绩。
4.结合设计和开发内容,完成课程设计报告。
要求语言表达逻辑合理,图表清晰,准确表达课程设计内容和结果。
参考文献
[1]明日科技.Java从入门到精通(第3版),清华大学出版社,2012
[2](美)霍斯特曼,科内尔著,周立新等译.Java核心技术卷1基础知识(原书第9版),机械工业出版社,2014
[3](美)埃克尔.Java编程思想(第4版).机械工业出版社,2007
[4](美)梁勇,李娜.Java语言程序设计:
进阶篇(原书第8版),机械工业出版社,2011
审查意见
指导教师签字:
教研室主任签字:
2014年6月15日
文件管理系统
一、需求分析
题目要求对文件进行复制,压缩,解压等操作,相当于一个简单的文管理系统。
对此我新加了剪切,删除,和重命名等功能。
程序的整体输入控制是采用图形用户界面,同时为了减少用户输入时不必要的错误,程序还支持文件选择器功能,用户可以直接点击相应的按钮选择相应的文件或文件夹。
(1)复制功能实现了将文件复制到指定的文件夹中(包括文件夹的复制和单个文件的复制),同时允许用户选择不同类型的文件复制。
其中有全文件复制(文件夹里所有文件全部复制)、无空文件夹的文件复制(即复制的文件夹不含空文件夹)、指定参数的文件复制(即文件夹复制时可以指定相应的类型参数doc、txt等选择要被复制的文件类型)。
(2)压缩功能实现将文件压缩到指定路径(包括单个文件的压缩和文件夹的压缩)。
(3)解压功能实现将指定的压缩文件解压到指定的路径
(4)剪切功能实现将制订文件夹下的文件剪切到制订的文件夹下,与复制不同的,剪切后该文件只存在于剪切后的文件夹。
(5)删除功能实现了文件的删除和文件夹删除,其中文件的删除可以直调用文件的方法删除文件,而文件夹的删除必须递归删除文件夹中的所有文件,然后再层层调用方法删除文件夹。
(6)重命名功能实现对指定文件夹下的文件的重命名,如果该文件夹下已经存在该文件名,则提示重新命名
二、概要设计
图2-1设计模块图
创建Menu对象
选择功能
创建Copy创建Zip创建Unzip创建Cut创建Delete创建Rename
调用compactFile调用UnzipchangeDirectoryrenameFile
调用copy调用empty调用extcopy调用delFile调用delDir
图2-2系统流程图
三、运行环境、开发语言
Eclipse、Java
四、详细设计
1程序清单
表4-1主要列出了各个文件实现的功能
表4-1程序清单
文件名
功能
Copytest.java
实现功能类,包含所有功能所需的方法
Menu.java
图形界面—菜单界面
Copy.java
图形界面—复制界面
Zip.java
图形界面—压缩界面
Unzip.java
图形界面—解压界面
Cut.java
图形界面—剪切界面
Delete.java
图形界面—删除界面
Rename.java
图形界面—重命名界面
表4-2主要列出Copytest.java文件中各个方法的所实现的功能。
其余文件的方法基本都是用于图形用户界面的设置,在此就不一一例举。
表4-2Copytest.java中方法清单
方法名
功能
doCopy(Stringpath1,
Stringpath2,Stringname)
单个文件复制
copy(Stringfrompath,Stringtopath)
无参数文件夹复制(含空文件夹)
emptycopy(Stringfrompath,Stringtopath)
无参数文件夹复制(不含空文件夹)
extcopy(Stringfrompath,Stringtopath,String[]temp)
参数限制的文件复制
compactFile(Stringsource,Stringtarget)
文件压缩,调用文件夹压缩方法和文件压缩方法
recursionFile(Stringfilepath,Stringorigin)
递归调用文件,同时实现对文件夹的压缩
ZipFile(Filefile,Stringorigin)
压缩单个文件
Unzip(Stringsource,Stringtarget)
解压文件
delFile(Stringfilepath)
删除单个文件
delDir(Stringpath)
删除一个文件夹
renameFile(Stringpath,Stringoldname,Stringnewname)
重命名文件
changeDirectory(Stringfilename,Stringoldpath,Stringnewpath)
将文件剪切到指定文件夹
2主要代码
2.1菜单界面
运行程序时会弹出一个菜单界面,供用户选择相应的文件操作。
包括复制、压缩、解压、剪切、删除、重命名。
该功能截图如图2-1所示.
图4-1菜单功能界面
2.2复制界面
点击复制选项,会弹出窗口,如图4-2所示。
在文本框里输入相应信息,或者直接点击相应的按钮,通过文件选择器选择文件,获取路径信息,如图4-3所示。
具体代码如下:
图4-2文件复制图4-3文件选择器选择文件
(1)复制功能代码,用于调用
//单个文件复制,用于调用
publicstaticvoiddoCopy(Stringpath1,Stringpath2,Stringname){
Readerin=null;
Writerout=null;
try{
in=newFileReader(path1+"/"+name);
out=newFileWriter(path2+"/"+name);
intlen=0;
char[]c=newchar[1024];
while((len=in.read(c))!
=-1){
out.write(c,0,len);
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
in.close();
out.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
(2)无参数的文件复制,递归遍历文件夹,调用doCopy()方法实现复制
//无参数文件夹复制(含空文件夹)
publicstaticvoidcopy(Stringfrompath,Stringtopath){
Fileffile=newFile(frompath);
File[]fs=ffile.listFiles();
if(fs!
=null){
for(Filef:
fs){
if(f.isDirectory()){
newFile(topath+"/"+f.getName()).mkdirs();
copy(f.getAbsolutePath(),topath+"/"+f.getName());
}
else{
doCopy(frompath,topath,f.getName());//执行文件复制操作
}
}
}
}
(3)功能是在全文件复制的基础上改动的,在方法中增加判断语句,如果是空文件夹就不复制。
//无空文件夹的复制
publicstaticvoidemptycopy(Stringfrompath,Stringtopath){
Fileffile=newFile(frompath);
File[]fs=ffile.listFiles();
if(fs!
=null){
for(Filef:
fs){
if(f.isDirectory()){
if((f.listFiles()).length>0){
newFile(topath+"/"+f.getName()).mkdirs();
emptycopy(f.getAbsolutePath(),topath+"/"+f.getName());
}
}
else{
doCopy(frompath,topath,f.getName());//执行文件复制操作
}
}
}
}
(4)从用户输入操作获取要被复制的文件类型,然后通过数组传递参数,根据参数来限制复制的文件类型
//有参数限制的文件复制
publicstaticvoidextcopy(Stringfrompath,Stringtopath,String[]temp){
Filefromfile=newFile(frompath);
File[]fs=fromfile.listFiles();
if(fs!
=null){
for(Filef:
fs){
//如果是文件夹则进行递归调用
if(f.isDirectory()){
if((f.listFiles()).length>0){
newFile(topath+"/"+f.getName()).mkdirs();
extcopy(f.getAbsolutePath(),topath+"/"+f.getName(),temp);
}
}
//如果是文件则进行判断
else{
for(inti=0;iif(f.getName().endsWith(temp[i])){//过滤不符合要求的文件
doCopy(frompath,topath,f.getName());//执行文件复制操作
}
}
}
}
}
}
2.3压缩界面
点击压缩选项,会弹出窗口,如图4-4所示。
在文本框里输入相应信息,或者直接点击相应的按钮,通过文件选择器选择文件,获取路径信息,类似可参照图4-3。
具体代码如下:
图4-4文件压缩界面
(1)通过该方法传递路径信息,同时调用递归遍历的方法
//文件压缩
publicstaticvoidcompactFile(Stringsource,Stringtarget){
try{
out=newZipOutputStream(newBufferedOutputStream
(newFileOutputStream(target)));//创建压缩文件输出流
recursionFile(source,source);//递归遍历文件
out.close();//关闭输入流
}catch(Exceptione){
System.out.println("压缩出现错误!
");
}
}
(2)该方法实现递归遍历文件夹,同时判断文件是否为文件夹,如果是,就添加压缩项,如果不是就调用单个文件压缩的方法
//压缩文件夹
publicstaticvoidrecursionFile(Stringfilepath,Stringorigin)throwsException{
//该方法的作用是递归遍历文件
String[]temp=origin.split("/");//将文件路径以“/”分割为若干字符串
Stringorigin1=temp[temp.length-1];//要保留的路径值
Filefile=newFile(filepath);
File[]files=file.listFiles();
for(Filef:
files){
if(!
f.isDirectory()){
//如果是文件,则执行压缩操作
ZipAFile(f,origin);
}else{
//如果是目录,则首先将目录添加到压缩项中
out.putNextEntry(newZipEntry(f.getAbsolutePath().substring(
f.getAbsolutePath().indexOf(origin1))+"/"));
recursionFile(f.getAbsolutePath(),origin);
}
}
}
(3)该方法用于实现单个文件压缩
//压缩文件
publicstaticvoidZipAFile(Filefile,Stringorigin)throwsIOException{
String[]temp=origin.split("/");//将文件路径以“/”分割为若干字符串
Stringorigin1=temp[temp.length-1];//要保留的路径值
in=newFileInputStream(file);//创建文件源输入流
out.putNextEntry(newZipEntry(file.getAbsolutePath().substring(
file.getAbsolutePath().indexOf(origin1))));//将当前文件添加到压缩项
byte[]b=newbyte[1024];
intlen;
while((len=in.read(b))!
=-1){
out.write(b,0,len);
}
in.close();//关闭输入流
}
2.4解压界面
点击解压选项,会弹出窗口,如图4-5所示。
在文本框里输入相应信息,或者直接点击相应的按钮,通过文件选择器选择文件,获取路径信息,类似可参照图2-3。
具体代码如下:
图4-5文件解压界面
通过传递的路径信息完成解压操作
//解压文件
publicstaticvoidUnZip(Stringsource,Stringtarget){
try{
ZipFilezf=newZipFile(source);//创建一个指向zip文件的ZipFile对象
EnumerationentriesEnum=zf.entries();//得到该压缩文件的所有压缩项
while(entriesEnum.hasMoreElements()){
ZipEntryentry=(ZipEntry)entriesEnum.nextElement();
if(entry.isDirectory()){//如果是文件夹
newFile(target+"/"+entry.getName()).mkdirs();
}
else{//如果是文件
InputStreamin=zf.getInputStream(entry);//得到指向该内容的流
BufferedOutputStreamout=newBufferedOutputStream(
newFileOutputStream(target+"/"+entry.getName()));
byte[]b=newbyte[8*1024];
intlen=0;
while((len=in.read(b))!
=-1){
out.write(b,0,len);
}
in.close();
out.close();
}
}
}catch(IOExceptione){
JOptionPane.showMessageDialog(null,"解压出现错误!
");
}
}
2.5删除界面
点击删除选项,会弹出窗口,如图4-6所示。
选择相应的删除类型,在文本框里输入相应信息。
或者直接点击相应的按钮,通过文件选择器选择文件,获取路径信息,类似可参照图4-3。
具体代码如下:
图4-6文件删除界面
(1)该方法主要调用了File的delete()方法删除单个文件
//删除文件
publicstaticvoiddelFile(Stringfilepath){
Filefile=newFile(filepath);
if(file.exists()&&file.isFile())
file.delete();
}
(2)该方法主要调用File的delete()删除文件夹,不同的是要删除文件夹,必须保证里面无文件和子目录,所以需要递归遍历镇整个文件夹,逐层删除各级文件夹
//删除文件夹目录
publicstaticvoiddelDir(Stringpath){
Filedir=newFile(path);
if(dir.exists()){
File[]temp=dir.listFiles();
for(inti=0;iif(temp[i].isDirectory()){//删除目录必须递归删除该目录下所有子目录和文件
delDir(path+"/"+temp[i].getName());
}
else{
temp[i].delete();
}
}
dir.delete();
}
}
2.5重命名界面
点击重命名选项,会弹出窗口,如图4-7所示。
在文本框里输入相应信息。
或者直接点击相应的按钮,通过文件选择器选择文件,获取路径信息,类似可参照图4-3。
具体代码如下:
图4-7文件重命名界面
该方法获取传递的路径信息及文件名信息,调用的是文件的renameTo方法实现文件的重命名
//指定文件夹下的文件重命名
publicstaticvoidrenameFile(Stringpath,Stringoldname,Stringnewname){
if(!
oldname.equals(newname)){//新名字和旧名字不一样才进行重命名
FileoldFile=newFile(path+"/"+oldname);
FilenewFile=newFile(path+"/"+newname);
if(new