File类的应用--拷贝
拷贝一个目录,包括里面的文件,要用到递归.也就是函数本身调用自身.
递归要注意:
1,限定条件,结束递归
2,要注意递归的次数,尽量避免内存溢出
思路:1,在拷贝的位置先创建目
2,遍历时不是文件,是文件则直接拷贝过去
不是文件则递归,创建目录,再对目录中的文件在进行判断
public class CopyDir {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
File src = new File("F:/java/day21.1");
File dest = new File("F:");
copyDir(src, dest);
}
public static void copyDir(File src, File dest) throws Exception {
// 获取要创建的文件夹的路径
File newDir = new File(dest, src.getName());
// 在指定路径下创建新的文件夹
newDir.mkdir();
// 获取源文件中该文件夹中的文件
File[] arr = src.listFiles();
// 遍历
for (File file : arr) {
// 判断是否是文件,若是文件则直接拷贝
if (file.isFile())
// 拷贝到新创建的目录下
copyFile(file, new File(newDir, file.getName()));
if (file.isDirectory())
//是文件夹则递归
copyDir(file, newDir);
}
}
//拷贝文件
private static void copyFile(File src, File dest) throws IOException {
try (InputStream is = new FileInputStream(src);
OutputStream os = new FileOutputStream(dest);) {
byte[] buff = new byte[1024];
int len;
while ((len = is.read(buff)) != -1) {
os.write(buff, 0, len);
}
}
}
}