[java]代码库
/**
* 复制整个目录的内容
*
* @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;
}