需要引用笔记《文件拷贝的实现》的方法
1 public static void copyDirectory(File src,File dest){ 2 if(src.isDirectory()){ 3 dest=new File(dest,src.getName());//在dest文件夹下创建src文件夹 4 } 5 copyDir(src, dest); 6 } 7 public static void copyDir(File src,File dest){ 8 9 if(src.isDirectory()){10 dest.mkdirs();11 for(File sub:src.listFiles()){12 copyDirectory(sub, new File(dest,sub.getName()));13 }14 }else if(src.isFile()){15 copyFile(src, dest);16 }17 }
A (源文件夹) B(目标文件夹)
/ \
b c
|
d.txt
假设此时,要复制A文件夹到B文件夹
1.那么copyDir()方法是用来干嘛的呢?
答:是为了复制A(文件夹),仅仅是用来复制A而已,不包括A文件夹里面的b/c/d.txt等文件。
如果,没有调用copyDir(),那么B文件夹下的内容将会是:
B
/ \
b c
|
d.txt
调用copyDir()的结果是:
B
|
A
/ \
b c
|
d.txt
完整代码:
1 package com.IO; 2 import java.io.*; 3 public class CopyUtil { 4 /** 5 * 拷贝文件夹 6 * @param src 7 * @param dest 8 */ 9 public static void copyDirectory(String srcPath,String destPath){ //重载copyDirectory()方法10 File src=new File(srcPath);11 File dest=new File(destPath);12 copyDirectory(src, dest);13 }14 public static void copyDirectory(File src,File dest){15 if(src.isDirectory()){16 dest=new File(dest,src.getName());//在dest目录下创建一个src同名的文件17 }18 copyDir(src, dest);19 }20 public static void copyDir(File src,File dest){21 if(src.isDirectory()){22 dest.mkdirs();23 for(File file:src.listFiles()){24 copyDir(file, new File(dest,file.getName()));//重点!!25 }26 }else if(src.isFile()){27 copyFile(src, dest);28 }29 }30 /**31 * 拷贝文件32 * @param src33 * @param dest34 */35 public static void copyFile(String srcPath,String destPath){36 File src=new File(srcPath);37 File dest=new File(destPath);38 copyFile(src, dest);39 }40 public static void copyFile(File src,File dest){41 BufferedInputStream bis=null;42 BufferedOutputStream bos = null;43 try {44 bis = new BufferedInputStream(new FileInputStream(src));45 bos = new BufferedOutputStream(new FileOutputStream(dest));46 byte[] flush=new byte[1024];47 int len=0;//实际获取的数据长度48 while(-1!=(len=bis.read(flush))){49 bos.write(flush);//写入数据50 }51 bos.flush();52 } catch (FileNotFoundException e) {53 System.out.println("文件找不到");54 e.printStackTrace();55 } catch (IOException e) {56 System.out.println("读取流失败");57 e.printStackTrace();58 }finally{59 60 try {61 if(null!=bos){62 bos.close();63 }64 if(null!=bis){65 bis.close();66 }67 } catch (IOException e) {68 System.out.println("关闭流失败!");69 e.printStackTrace();70 }71 72 }73 }74 }