[java]代码库
/**
* 移动目录。
*
* @param srcDirName
* 待移动的原目录名
* @param destDirName
* 目标目录名
* @param overlay
* 如果目标目论存在,是否覆盖
* @return 目录移动成功返回true,否则返回false
*/
public static boolean moveDirectory(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 = MoveFileUtil.moveFile(files[i].getAbsolutePath(),
destDirName + files[i].getName(), overlay);
if (!flag) {
break;
}
}
// 移动子目录
else if (files[i].isDirectory()) {
flag = MoveFileUtil.moveDirectory(files[i].getAbsolutePath(),
destDirName + files[i].getName(), overlay);
if (!flag) {
break;
}
}
}
if (!flag) {
System.out.println("移动目录" + srcDirName + "至" + destDirName + "失败!");
return false;
}
// 删除原目录
if (DeleteFileUtil.deleteDirectory(srcDirName)) {
System.out.println("移动目录" + srcDirName + "至" + destDirName + "成功!");
return true;
} else {
System.out.println("移动目录" + srcDirName + "至" + destDirName + "失败!");
return false;
}
}