硬盘没分区,所以我就把D:\\JavaTest 复制到C盘好了
数据源文件内容:
代码实现:
public class CopyFoldersDemo { public static void main(String[] args) throws IOException{ //1.创建数据源File对象,路径是D:\\JavaTest File srcFile = new File("D:\\JavaTest"); //2.创建目的地File对象,路径是C:\\ File destFile = new File("C:\\"); //3.写方法实现文件夹的复制,参数为数据源File对象和目的地File对象 copyFolder(srcFile,destFile); } private static void copyFolder(File srcFile, File destFile) throws IOException{ //判断数据源File是否是目录 if (srcFile.isDirectory()){ //在目的地下创建和数据源File名称一样的目录 String srcFileName = srcFile.getName(); /* 第一次调用时,这里创建的就是C:\\JavaTest 如果第二次调用时,还存在文件夹,创建的就是C:\\JavaTest\\XXX */ File newFolder = new File(destFile,srcFileName); if (!newFolder.exists()){ newFolder.mkdir(); } //获取数据源File下所有文件或者目录的File数组 File[] listFiles = srcFile.listFiles(); //遍历该数组,得到每一个File对象 for (File file : listFiles){ //把该File作为数据源File对象,递归调用复制文件夹的方法 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); } bis.close(); bos.close(); } }
运行结果: