1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| package com.fluffysponge;
import java.io.*;
/** * 需求: * 把“E:\\com\\fluffysponge”复制到F盘目录下 * 思路: * 1.创建数据源File对象,路径是E:\\com\\fluffysponge * 2.创建目的地File对象,路径是F:\\ * 3.写方法实现文件夹的复制,参数为数据源File对象和目的地File对象 * 4.判断数据源File是否是目录 * 是: * A:在目的地下创建和数据源File名称一样的目录 * B:获取数据源File下所有文件或者目录的File数组 * C:遍历该File数组,得到每一个File对象 * D.把该File作为数据源File对象,递归调用复制文件夹的方法 * 不是:说明是文件,直接复制,用字节流 * */
public class CopyFolderDemo { public static void main(String[] args) throws IOException { //创建数据源File对象,路径是E:\\com\\fluffysponge File srcFile = new File("E:\\com\\fluffysponge"); //创建目的地File对象,路径是F:\\ File destFile = new File("F:\\");
//写方法实现文件夹的复制,参数为数据源File对象和目的地File对象 copyFolder(srcFile,destFile); }
//复制文件夹 private static void copyFolder(File srcFile, File destFile) throws IOException { //判断数据源File是否是目录 if(srcFile.isDirectory()){ //在目的地下创建和数据源File名称一样的目录 String srcFileName = srcFile.getName(); File newFolder = new File(destFile,srcFileName); if(!newFolder.exists()){ newFolder.mkdir(); }
//获取数据源File下所有文件或者目录的File数组 File[] fileArray = srcFile.listFiles();
//遍历该File数组,得到每一个File对象 for(File file : fileArray){ copyFolder(file,newFolder); } }else{ //说明是文件,直接复制,用字节流 File newFile = new File(destFile,srcFile.getName()); copyFile(srcFile,newFile); } }
//字节缓冲流复制文件 private static void copyFile(File srcFile,File destFile) throws IOException { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
byte[] bys = new byte[1024]; int len; while((len = bis.read(bys)) != -1){ bos.write(bys,0,len); } bos.close();; bis.close();; } }
|