package IO流_字节流_节点流_文件夹的拷贝;
import java.io.File;
import java.io.IOException;
import IO流_字节流_节点流_文件的拷贝.FileUtil;
/**
- 文件夹拷贝
- 1.文件用IO流 ,赋值 copyFile
- 2.文件夹 创建 mkdirs
- 3.递归查找子孙级文件|文件夹;
- 如 :
-
A 文件夹
-
/ \
- a.txt b
-
|
-
b.txt
- 拷贝A: 先创建文件夹 AA
-
AA
-
|
-
A 整体拷贝 是文件就直接赋值;是文件夹就创建
-
/ \
- IO流读取a.txt b 创建
-
| 判断是文件还是文件夹
-
b.txt IO流读取
*/
public class CopyDir {
public static void main(String[] args) {
//源目录
String srcPath = "e:/xp/test/study";
//目标目录
String destPath = "e:/xp/test/dir";
//创建源的对象
copyDir(srcPath,destPath);
}
//下面统一放到FileUtil里面 优化
/**
* 拷贝文件夹
* @param src 源路径
* @param dest 目标路径
*/
public static void copyDir(String srcPath,String destPath){
File src = new File(srcPath);
//判断
File dest = new File(destPath);
copyDir(src,dest);//调用
}
/**
* 拷贝文件夹
* @param src 源File对象
* @param dest 目标File对象
*/
public static void copyDir(File src,File dest){
if(src.isDirectory()){//是否是文件夹
dest = new File(dest,src.getName());//在目标目录构建文件夹
}
copyDirDetail(src,dest);//调用
}
/**
* 拷贝文件夹细节
* @param src
* @param dest
*/
public static void copyDirDetail(File src,File dest){//copyDirDetail复制Dir细节
if(src.isFile()){
try {
FileUtil.copyFile(src, dest);//是文件就直接拷贝
} catch (IOException e) {
e.printStackTrace();
}
}else if(src.isDirectory()){
//确保目标文件夹存在
dest.mkdirs();//是文件夹或者目录就创建
//用递归获取下一级的目录或文件
for(File sub:src.listFiles()){
//构建;自己调用自己
copyDirDetail(sub, new File(dest,sub.getName()));
}
}
}
}