Ejemplo n.º 1
0
  /**
   * 复制整个目录的内容
   *
   * @param srcDirName 源目录名
   * @param descDirName 目标目录名
   * @param coverlay 如果目标目录存在,是否覆盖
   * @return 如果复制成功返回true,否则返回false
   */
  public static boolean copyDirectoryCover(
      String srcDirName, String descDirName, boolean coverlay) {
    File srcDir = new File(srcDirName);
    // 判断源目录是否存在
    if (!srcDir.exists()) {
      log.debug("复制目录失败,源目录 " + srcDirName + " 不存在!");
      return false;
    }
    // 判断源目录是否是目录
    else if (!srcDir.isDirectory()) {
      log.debug("复制目录失败," + srcDirName + " 不是一个目录!");
      return false;
    }
    // 如果目标文件夹名不以文件分隔符结尾,自动添加文件分隔符
    String descDirNames = descDirName;
    if (!descDirNames.endsWith(File.separator)) {
      descDirNames = descDirNames + File.separator;
    }
    File descDir = new File(descDirNames);
    // 如果目标文件夹存在
    if (descDir.exists()) {
      if (coverlay) {
        // 允许覆盖目标目录
        log.debug("目标目录已存在,准备删除!");
        if (!FileUtils.delFile(descDirNames)) {
          log.debug("删除目录 " + descDirNames + " 失败!");
          return false;
        }
      } else {
        log.debug("目标目录复制失败,目标目录 " + descDirNames + " 已存在!");
        return false;
      }
    } else {
      // 创建目标目录
      log.debug("目标目录不存在,准备创建!");
      if (!descDir.mkdirs()) {
        log.debug("创建目标目录失败!");
        return false;
      }
    }

    boolean flag = true;
    // 列出源目录下的所有文件名和子目录名
    File[] files = srcDir.listFiles();
    for (int i = 0; i < files.length; i++) {
      // 如果是一个单个文件,则直接复制
      if (files[i].isFile()) {
        flag = FileUtils.copyFile(files[i].getAbsolutePath(), descDirName + files[i].getName());
        // 如果拷贝文件失败,则退出循环
        if (!flag) {
          break;
        }
      }
      // 如果是子目录,则继续复制目录
      if (files[i].isDirectory()) {
        flag =
            FileUtils.copyDirectory(files[i].getAbsolutePath(), descDirName + files[i].getName());
        // 如果拷贝目录失败,则退出循环
        if (!flag) {
          break;
        }
      }
    }

    if (!flag) {
      log.debug("复制目录 " + srcDirName + " 到 " + descDirName + " 失败!");
      return false;
    }
    log.debug("复制目录 " + srcDirName + " 到 " + descDirName + " 成功!");
    return true;
  }