剪切(使用File类的renameTo 方法和递归实现非空目录的剪切)
package com.cn.recursion;
import java.io.File;
import java.io.IOException;
public class CutDireaction {
public static void main(String[] args) throws IOException {
/**
* 以下是File类方法的测试
*/
//renameTo()如果目标文件与源文件是在同一个路径下,那么renameTo()的作用是重命名
/* File file = new File("f:/b.txt");
File file2 = new File("f:/c.txt");
System.out.println(file.renameTo(file2));
File file5 = new File("f:/aaa");
File file6 = new File("f:/bbb");
System.out.println(file5.renameTo(file6));*/
//如果目标文件与源文件不是在同一个路径下,那么renameTo()的作用就是剪切
// File file3 = new File("g:/b.txt");
// File file4 = new File("f:/b.txt");
// System.out.println(file3.renameTo(file4));
//如果目标文件与源文件不是在同一个路径下,那么renameTo()的作用就是剪切,而且还不能操作文件夹,只能操作文件。
/* File file7 = new File("f:/bbb");
File file8 = new File("g:/bbb");
System.out.println(file7.renameTo(file8)); //失败 false*/
//renameTo(File dest) 重命名文件或文件夹,也可以操作非空的文件夹(相同路径),剪切(不同路径)时候不能操作非空的文件夹。
/* File file9 = new File("f:/a");
File file10 = new File("f:/c");//true
// File file11 = new File("g:/c");//false
System.out.println(file9.renameTo(file10));*/
/*File src = new File("f:\\a");
System.out.println(src.getName());*/
// 使用File类和递归实现文件的剪切.
File src = new File("f:\\a");
// File dest = new File("f:/");
File dest = new File("g:/");
cutFile(src, dest);
}
/**
* 使用File类和递归实现文件的剪切.
* @param src
* @param dest
* @throws IOException
*/
private static void cutFile(File src, File destDir) throws IOException {// f:/a g:/
if(!src.exists() || !destDir.exists()){
System.out.println("指定的源目录或者目标目录不存在");
return;
}
if(!src.isDirectory() || !destDir.isDirectory()){
System.out.println("指定的源目录或者目标目录不是目录");
return;
}
//得到源目录名
String srcName = src.getName();// a
//根据源目录名创建新目录名
File dest = new File(destDir, srcName);
dest.mkdir();//创建目标目录 g:/a ............
//遍历源目录
File[] listFiles = src.listFiles();
for(File f : listFiles){
if(f.isFile()){
File destFile = new File(dest, f.getName());
//如果是子源文件,使用rename()方法移动至目标目录中,该方法同时会删除源目录中的文件(剪切)
f.renameTo(destFile);//g:/a/a.txt ....
}else if(f.isDirectory()){
// 如果是子目录,执行重复动作. 将源子目录 , 目标目录(父目录+//)
cutFile(f, new File(dest, File.separator)); // f:/a/b // g:/a/
}
}
//删除源目录
src.delete();
}
}