1 packagecom.filetest;2
3 importjava.io.BufferedInputStream;4 importjava.io.BufferedOutputStream;5 importjava.io.File;6 importjava.io.FileInputStream;7 importjava.io.FileOutputStream;8 importjava.io.IOException;9 importjava.util.Scanner;10
11 public classcopyfile {12
13 public static void main(String args[]) throwsIOException{14
15 copy(); //调用复制函数
16 System.out.println("复制完成!"); //提示复制完成
17 }18
19 private static void copy() throwsIOException {20
21 System.out.println("输入你要复制的文件路径及名称:");22 Scanner scanner=newScanner(System.in);23 String oldpath=scanner.next(); //接收原文件夹路径及名称
24
25 File ofile=newFile(oldpath);26 if((!ofile.exists()||!ofile.isDirectory())){ //判断源文件夹路径是否存在
27
28 if(oldpath.equals("end")) //路径不存在则进入判断内,如果输入的不是end则递归调用重新输入
29 {30 System.out.println("程序结束,感谢使用!");31 System.exit(-1);32 }33 else
34 {35 System.out.println("输入的源文件夹路径不存在,请重新输入!(输入end退出程序)");36 copy();37 }38
39 }40
41 System.out.println("输入你要复制该文件到哪个路径:");42 String newpath=scanner.next(); //接收目标文件夹路径及名称
43
44 File nfile=newFile(newpath);45 if(!nfile.isAbsolute()){ //判断目标文件夹路径是否为目录
46 if(newpath.equals("end")) //路径不存在则进入判断内,如果输入的不是end则递归调用重新输入
47 {48 System.out.println("程序结束,感谢使用!");49 System.exit(-1);50 }51 else
52 {53 System.out.println("输入的目标文件夹目录格式不正确,请重新输入!(输入end退出程序)");54 copy();55 }56
57 }58
59 //截取源文件夹路径最后的名字
60 String laststr = oldpath.substring(oldpath.lastIndexOf("/"), oldpath.length());61 copyDirectiory(oldpath,newpath+"/"+laststr); //将原路径文件夹名称和目标路径文件夹名称传递给复制文件夹函数
62
63
64 }65
66
67 //用缓冲流复制文件函数
68 public static voidcopyFile(File sourceFile,File targetFile)69 throwsIOException{70 //新建文件输入流并对它进行缓冲
71 FileInputStream input = newFileInputStream(sourceFile);72 BufferedInputStream inBuff=newBufferedInputStream(input);73
74 //新建文件输出流并对它进行缓冲
75 FileOutputStream output = newFileOutputStream(targetFile);76 BufferedOutputStream outBuff=newBufferedOutputStream(output);77
78 intlen;79 while ((len =inBuff.read()) != -1)80 {81 outBuff.write(len);82 }83 //刷新此缓冲的输出流
84 outBuff.flush();85
86 //关闭流
87 inBuff.close();88 outBuff.close();89 output.close();90 input.close();91 }92
93
94 //复制文件夹函数
95 public static voidcopyDirectiory(String sourceDir, String targetDir)96 throwsIOException {97
98 File aimfile=newFile(targetDir);99 if(!(aimfile).exists()){ //查看目录是否存在,不存在则新建
100 aimfile.mkdirs();101 }102
103 if(sourceDir.equals(targetDir)){ //如果文件路径及文件名相同则覆盖
104 System.out .println("文件已存在,是否覆盖(N退出/任意键继续)?");105 Scanner scanner=newScanner(System.in);106 String NY=scanner.next();107 if(NY.equalsIgnoreCase("n")){ //如果不想覆盖 可退出程序
108 System.out.println("程序结束,感谢使用!");109 System.exit(-1);110 }111
112 }113
114 //获取源文件夹下的文件或目录
115 File oldfile=newFile(sourceDir);116 File[] file=oldfile.listFiles();117
118 for(int i=0;i
121 if (file[i].isFile()) //如果是文件,传递给copyFile()函数进行复制
122 {123 //目标文件
124 File aim=newFile(targetDir);125 File targetFile=new File(aim.getAbsolutePath()+"/"+file[i].getName());126 copyFile(file[i],targetFile);127 }128 if (file[i].isDirectory()) //如果是文件夹,则递归调用
129 {130 //要递归复制的源文件夹
131 String soursefiles=sourceDir + "/" +file[i].getName();132
133 //要递归复制的目标文件夹
134 String aimfiles=targetDir + "/"+file[i].getName();135
136 copyDirectiory(soursefiles, aimfiles);137 }138 }139 }140 }