递归复制多级文件夹

    xiaoxiao2021-03-25  125

    需求:复制多级文件夹 数据源:E:/Shadowsocks-win-2.5.2/test2目的地:E:将该多级文件夹整个复制到e盘根目录 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /*思路: * 复制多级文件夹的流程: * A:封装数据源File * B:封装目的地File * C:判断该File是文件夹还是文件 * a:是文件夹 * 就在目的地目录下创建该文件夹 * 获取该File对象下的所有文件或者文件夹File对象 * 遍历得到每一个File对象 * 回到C(递归调用) * b:是文件 * 就复制(字节流) 可以写一个函数来完成复制功能 */ /** * @author Administrator * */ public class Java_2 { public static void main(String[] args) { // 创建指向源文件和目标文件夹的实例 File file = new File("E:\\Shadowsocks-win-2.5.2\\test2"); File file2 = new File("E:"); findFiles(file, file2); } /** * 判断多级文件夹文件并复制的方法 * @param file * @param file2 */ public static void findFiles(File file, File file2) { if (file.exists()) { if (file.isFile()) {// 是文件的话直接复制到目标文件夹内,并打印文件路径 copyFiles(file, file2); System.out.println(file.getAbsolutePath() + "已创建"); } else if (file.isDirectory()) {// 是文件夹的话创建指向新目录的文件实例,调用mkdirs创建多级文件夹 File file5 = new File(file2.getAbsolutePath() + "\\" + file.getName()); file5.mkdirs(); // 接收此文件夹下所有文件目录 实例 File[] file3 = file.listFiles(); // 递归出口 if (file3 == null) { return; } // 遍历文件,递归,循环判断 for (File file4 : file3) { findFiles(file4, file5); System.out.println(file5.getAbsolutePath() + "已创建"); } } } else { return; } } /** * 把file的内容复制到file2的方法 * @param file * @param file2 */ public static void copyFiles(File file, File file2) { FileInputStream fis; FileOutputStream fos; // 包装流 带缓冲区 BufferedInputStream bis = null; BufferedOutputStream bos = null; try { fis = new FileInputStream(file); fos = new FileOutputStream(file2.getAbsolutePath() + "\\" + file.getName()); bis = new BufferedInputStream(fis); // 构造10M的缓冲区 bos = new BufferedOutputStream(fos, 10 * 1024 * 1024); // 文件格式多样,用字节流逐块接收 byte[] bytes = new byte[1024]; int len = 0; // 记录复制时间 逐块读取到内存并写出到新文本 long start = System.currentTimeMillis(); while ((len = bis.read(bytes, 0, 1024)) != -1) { bos.write(bytes, 0, len); } long end = System.currentTimeMillis(); System.out.println("复制" + file.getName() + "花费时间" + (end - start) + "ms"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (bis != null) { try {//关闭流 bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

    输出结果:

    复制RAR 压缩文件.rar 花费时间0ms E:\Shadowsocks-win-2.5.2\test2\RAR 压缩文件.rar已创建 E:\test2已创建 复制新建文本文档.avi 花费时间0ms E:\Shadowsocks-win-2.5.2\test2\tstst\新建文本文档.avi已创建 E:\test2\tstst已创建 复制肖4配套视频.flv 花费时间1330ms E:\Shadowsocks-win-2.5.2\test2\tstst\肖4配套视频.flv已创建 E:\test2\tstst已创建 复制酬勤考资全自动播放器.exe 花费时间33ms E:\Shadowsocks-win-2.5.2\test2\tstst\酬勤考资全自动播放器.exe已创建 E:\test2\tstst已创建 E:\test2已创建 复制新建位图图像.bmp 花费时间0ms E:\Shadowsocks-win-2.5.2\test2\新建位图图像.bmp已创建 E:\test2已创建
    转载请注明原文地址: https://ju.6miu.com/read-6581.html

    最新回复(0)