/** |
* 复制整个目录的内容 |
* |
* @param srcDirName |
* 待复制的目录名 |
* @param destDirName |
* 目标目录名 |
* @param overlay |
* 如果目标目录存在,是否覆盖 |
* @return 如果复制成功返回true,否则返回false |
*/ |
public static boolean copyDirectory(String srcDirName, String destDirName, |
boolean overlay) { |
// 判断原目录是否存在 |
File srcDir = new File(srcDirName); |
if (!srcDir.exists()) { |
System.out.println( "复制目录失败:原目录" + srcDirName + "不存在!" ); |
return false ; |
} else if (!srcDir.isDirectory()) { |
System.out.println( "复制目录失败:" + srcDirName + "不是一个目录!" ); |
return false ; |
} |
// 如果目标文件夹名不以文件分隔符结尾,自动添加文件分隔符 |
if (!destDirName.endsWith(File.separator)) { |
destDirName = destDirName + File.separator; |
} |
File destDir = new File(destDirName); |
// 如果目标文件夹存在, |
if (destDir.exists()) { |
if (overlay) { |
// 允许覆盖则删除已存在的目标目录 |
System.out.println( "目标目录已存在,准备删除它!" ); |
if (!DeleteFileUtil.delete(destDirName)) { |
System.out.println( "复制目录失败:删除目标目录" + destDirName + "失败!" ); |
} |
} else { |
System.out.println( "复制目录失败:目标目录" + destDirName + "已存在!" ); |
return false ; |
} |
} else { |
// 创建目标目录 |
System.out.println( "目标目录不存在,准备创建它!" ); |
if (!destDir.mkdirs()) { |
System.out.println( "复制目录失败:创建目标目录失败!" ); |
return false ; |
} |
} |
boolean flag = true ; |
// 列出源文件夹下所有文件(包括子目录)的文件名 |
File[] files = srcDir.listFiles(); |
for ( int i = 0 ; i < files.length; i++) { |
// 如果是一个单个文件,则进行复制 |
if (files[i].isFile()) { |
flag = CopyFileUtil.copyFile(files[i].getAbsolutePath(), |
destDirName + files[i].getName()); |
if (!flag) { |
break ; |
} |
} |
// 如果是子目录,继续复制目录 |
if (files[i].isDirectory()) { |
flag = CopyFileUtil.copyDirectory(files[i].getAbsolutePath(), |
destDirName + files[i].getName()); |
if (!flag) { |
break ; |
} |
} |
} |
if (!flag) { |
System.out.println( "复制目录" + srcDirName + "至" + destDirName + "失败!" ); |
return false ; |
} |
System.out.println( "复制目录" + srcDirName + "至" + destDirName + "成功!" ); |
return true ; |
} |