课程设计课程设计名称:java课程设计专业班级: XXX班级学生姓名: XXXX学号: XXXXX指导教师: XXXXX课程设计时间:目录目录 ------------------------ 1 课程设计任务书 ------------------------- 2一、需求分析 ------------------------- 3二、概要设计 ------------------------- 4三、开发语言 ------------------------- 4四、详细设计 ------------------------ 4五、调试与分析 ------------------------- 13六、功能测试 ------------------------- 14七、结论与心得 -------------------------- 15八、参考资料 -------------------------- 16九、成绩评价表 -------------------------- 17计算机科学技术(卓越计划)专业课程设计任务书文件管理系统一、需求分析题目要求对文件进行复制,压缩,解压等操作,相当于一个简单的文管理系统。
对此我新加了剪切,删除,和重命名等功能。
程序的整体输入控制是采用图形用户界面,同时为了减少用户输入时不必要的错误,程序还支持文件选择器功能,用户可以直接点击相应的按钮选择相应的文件或文件夹。
(1)复制功能实现了将文件复制到指定的文件夹中(包括文件夹的复制和单个文件的复制),同时允许用户选择不同类型的文件复制。
其中有全文件复制(文件夹里所有文件全部复制)、无空文件夹的文件复制(即复制的文件夹不含空文件夹)、指定参数的文件复制(即文件夹复制时可以指定相应的类型参数doc、txt等选择要被复制的文件类型)。
(2)压缩功能实现将文件压缩到指定路径(包括单个文件的压缩和文件夹的压缩)。
(3)解压功能实现将指定的压缩文件解压到指定的路径(4)剪切功能实现将制订文件夹下的文件剪切到制订的文件夹下,与复制不同的,剪切后该文件只存在于剪切后的文件夹。
(5)删除功能实现了文件的删除和文件夹删除,其中文件的删除可以直调用文件的方法删除文件,而文件夹的删除必须递归删除文件夹中的所有文件,然后再层层调用方法删除文件夹。
(6)重命名功能实现对指定文件夹下的文件的重命名,如果该文件夹下已经存在该文件名,则提示重新命名二、概要设计图2-1设计模块图图2-2系统流程图三、运行环境、开发语言Eclipse、Java四、详细设计1 程序清单表4-1主要列出了各个文件实现的功能表4-1 程序清单表4-2主要列出Copytest.java文件中各个方法的所实现的功能。
其余文件的方法基本都是用于图形用户界面的设置,在此就不一一例举。
表4-2 Copytest.java中方法清单2 主要代码2.1菜单界面运行程序时会弹出一个菜单界面,供用户选择相应的文件操作。
包括复制、压缩、解压、剪切、删除、重命名。
该功能截图如图2-1所示.图4-1 菜单功能界面2.2复制界面点击复制选项,会弹出窗口,如图4-2所示。
在文本框里输入相应信息,或者直接点击相应的按钮,通过文件选择器选择文件,获取路径信息,如图4-3所示。
具体代码如下:图4-2 文件复制图4-3文件选择器选择文件(1)复制功能代码,用于调用//单个文件复制,用于调用public static void doCopy(String path1,String path2,String name){Reader in= null;Writer out= null;try {in = new FileReader(path1+"/"+name);out = new FileWriter(path2+"/"+name);int len= 0;char[] c= new char[1024];while((len= in.read(c))!=-1){out.write(c,0,len);}} catch (IOException e) {e.printStackTrace();}finally{try {in.close();out.close();} catch (IOException e) {e.printStackTrace();}}}(2)无参数的文件复制,递归遍历文件夹,调用doCopy()方法实现复制//无参数文件夹复制(含空文件夹)public static void copy(String frompath,String topath){File ffile = new File(frompath);File[] fs = ffile.listFiles();if(fs != null){for(File f : fs){if(f.isDirectory()){new File(topath +"/"+ f.getName()).mkdirs();copy(f.getAbsolutePath(),topath +"/"+ f.getName());}else{doCopy(frompath,topath,f.getName()); //执行文件复制操作}}}}(3)功能是在全文件复制的基础上改动的,在方法中增加判断语句,如果是空文件夹就不复制。
//无空文件夹的复制public static void emptycopy(String frompath,String topath){File ffile = new File(frompath);File[] fs = ffile.listFiles();if(fs != null){for(File f : fs){if(f.isDirectory()){if((f.listFiles()).length>0){new File(topath +"/"+ f.getName()).mkdirs();emptycopy(f.getAbsolutePath(),topath +"/"+ f.getName());}}else{doCopy(frompath,topath,f.getName()); //执行文件复制操作}}}}(4)从用户输入操作获取要被复制的文件类型,然后通过数组传递参数,根据参数来限制复制的文件类型//有参数限制的文件复制public static void extcopy(String frompath,String topath,String[] temp){File fromfile = new File(frompath);File[] fs = fromfile.listFiles();if(fs != null){for(File f : fs){//如果是文件夹则进行递归调用if(f.isDirectory()){if((f.listFiles()).length>0){new File(topath +"/"+ f.getName()).mkdirs();extcopy(f.getAbsolutePath(),topath +"/"+ f.getName(),temp);}}//如果是文件则进行判断else{for(int i=0;i<temp.length;i++){if(f.getName().endsWith(temp[i])){ //过滤不符合要求的文件doCopy(frompath,topath,f.getName());//执行文件复制操作}}}}}}2.3 压缩界面点击压缩选项,会弹出窗口,如图4-4所示。
在文本框里输入相应信息,或者直接点击相应的按钮,通过文件选择器选择文件,获取路径信息,类似可参照图4-3。
具体代码如下:图4-4 文件压缩界面(1)通过该方法传递路径信息,同时调用递归遍历的方法//文件压缩public static void compactFile(String source,String target){try{out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(target))); // 创建压缩文件输出流recursionFile(source,source); // 递归遍历文件out.close();// 关闭输入流}catch(Exception e){System.out.println("压缩出现错误!");}}(2)该方法实现递归遍历文件夹,同时判断文件是否为文件夹,如果是,就添加压缩项,如果不是就调用单个文件压缩的方法//压缩文件夹public static void recursionFile(String filepath,String origin) throws Exception { //该方法的作用是递归遍历文件String[] temp=origin.split("/"); //将文件路径以“/”分割为若干字符串String origin1=temp[temp.length-1]; //要保留的路径值File file = new File(filepath);File[] files = file.listFiles();for (File f : files) {if (!f.isDirectory()) {// 如果是文件,则执行压缩操作ZipAFile(f,origin);} else {// 如果是目录,则首先将目录添加到压缩项中out.putNextEntry(new ZipEntry(f.getAbsolutePath().substring(f.getAbsolutePath().indexOf(origin1))+ "/"));recursionFile(f.getAbsolutePath(),origin);}}}(3)该方法用于实现单个文件压缩//压缩文件public static void ZipAFile(File file,String origin) throws IOException {String[] temp=origin.split("/"); //将文件路径以“/”分割为若干字符串String origin1=temp[temp.length-1]; //要保留的路径值in = new FileInputStream(file); // 创建文件源输入流out.putNextEntry(new ZipEntry(file.getAbsolutePath().substring(file.getAbsolutePath().indexOf(origin1)))); //将当前文件添加到压缩项byte[] b = new byte[1024];int len;while ((len = in.read(b)) != -1) {out.write(b, 0, len);}in.close();// 关闭输入流}2.4解压界面点击解压选项,会弹出窗口,如图4-5所示。