一、复制单级文件夹
需求:将"E:\Demo"文件夹复制到F盘下
分析:
1、创建数据源目录File,路径为"E:\Demo"
2、获取数据源目录File对象的名称也就是文件夹的名称
3、创建目的地目录File对象,路径名是要复制到的盘F:+将要复制到的文件名称(这里与原文件保持一致)
4、判断目的地目录对应的File是否存在,不存在就直接创建
5、获取数据源目录下的所有文件的File数组
6、遍历数组,得到每一个File对象,就是数据源文件
7、获取数据源文件File对象的名称
8、创建目的地文件File对象,路径名是目的地目录+名称
9、复制文件,由于文件类型不确定,采用字节流复制文件
/* * 1、创建数据目录File,路径为"E:\\Demo" 2、获取数据源目录File对象的名称也就是文件夹的名称 3、创建目的地目录File对象,路径名是要复制到的盘F:+将要复制到的文件名称(这里与原文件保持一致) 4、判断目的地目录对应的File是否存在,不存在就直接创建 5、获取数据源目录下的所有文件的File数组 6、遍历数组,得到每一个File对象,就是数据源文件 7、获取数据源文件File对象的名称 8、创建目的地文件File对象,路径名是目的地目录+名称 9、复制文件,由于文件类型不确定,采用字节流复制文件 * */ public class Demo01 { public static void main(String[] args) throws IOException { //创建数据目录File,路径为"E:\\Demo" File srcFolder = new File("E:\\Demo"); //获取数据源目录File对象的名称也就是文件夹的名称 String srcFolderName = srcFolder.getName(); //创建目的地目录File对象,路径名是要复制到的盘F:+将要复制到的文件名称(这里与原文件保持一致) File destFolder = new File("F:", srcFolderName); //判断目的地目录对应的File是否存在,不存在就直接创建 if (!destFolder.exists()) { destFolder.mkdir(); } else { System.out.println("文件名已存在,请修改目录名后再次运行"); } //获取数据源目录下的所有文件的File数组 File[] listfiles = srcFolder.listFiles(); //遍历数组,得到每一个File对象,就是数据源文件 for (File srcfile : listfiles) { //获取数据源文件File对象的名称 String srcfileName = srcfile.getName(); //创建目的地文件File对象,路径名是目的地目录+名称 File destfile = new File(destFolder, srcfileName); //复制文件,由于文件类型不确定,采用字节流复制文件 //调用方法 copyFile(srcfile, destfile); } }
二、复制多级文件夹
需求:把"E:\Demo"复制到F盘下,Demo中含有多个文件夹,文件夹中又有多个子文件夹
分析:
1、创建数据源对象,路径是"E:\Demo"
2、创建目的地File对象,路径是F:\
3、写方法实现文件夹的复制,参数为数据源File对象和目的地File对象(用到递归)
4、判断数据源File是否是目录
是:
A:在目的地下创建和数据源File名称一样的目录
B:获取数据源File下所有的文件或者目录的File数组
C:遍历该File数组,得到每一个File对象
D:把该File作为数据源File对象,递归调用复制文件夹的方法
不是:
表明是文件,直接用字节流复制
package Demo041102; import java.io.*; /* *1、创建数据源对象,路径是"E:\\Demo" 2、创建目的地File对象,路径是F:\\ 3、写方法实现文件夹的复制,参数为数据源File对象和目的地File对象(用到递归) 4、判断数据源File是否是目录 是: A:在目的地下创建和数据源File名称一样的目录 B:获取数据源File下所有的文件或者目录的File数组 C:遍历该File数组,得到每一个File对象 D:把该File作为数据源File对象,递归调用复制文件夹的方法 不是: 表明是文件,直接用字节流复制 * */ public class Demo02 { public static void main(String[] args) throws IOException { //创建数据源对象,路径是"E:\\Demo" File srcFile=new File("E:\\Demo"); //创建目的地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 [] files= srcFile.listFiles(); //遍历该File数组,得到每一个File对象 for (File file:files){ //把该File作为数据源File对象,递归调用复制文件夹的方法 copyFolder(srcFile,newFolder); } }else{ File newFile=new File(destFile,srcFile.getName()); copyFile(srcFile,newFile); } } private static void copyFile(File srcfile, File destfile) throws IOException { //创建字节缓冲输入输出流 BufferedInputStream bips = new BufferedInputStream(new FileInputStream(srcfile)); BufferedOutputStream bops = new BufferedOutputStream(new FileOutputStream(destfile)); //读取数据 byte[] bytes = new byte[1024]; int len; while ((len = bips.read(bytes)) != -1) { bops.write(bytes, 0, len); } bips.close(); bops.close(); } }