/** |
* 移动目录。 |
* |
* @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 ; |
} |
} |