我们经常接触到的是复制单个文件或者是压缩好的一个较大的压缩文件,要是多级文件目录和文件怎么办?
通常使用的是递归复制,复制的时候先判定复制的是文件还是目录,是目录就递归生成目录,是文件就直接复制。
import java.io.*;
/*
* 多级目录的递归复制
* */
public class CopyFolders {
public static void main(String[] args) {
// 1.创建源文件所在的目录
File src = new File("D:\\javaEE\\idea_workspase\\exam");
// 2.创建要复制文件夹的目标目录
File dest = new File("D:\\setup");
// 3.进行文件目录或者文件复制
copyFolders(src , dest);
}
private static void copyFolders(File src, File dest) {
// 4.拼接要复制目标的目录
File parent = new File(dest, src.getName());
// 5.进行目录的创建
parent.mkdirs();
// 6.获取源文件目录下面所有的子目录或者文件
File[] files = src.listFiles();
// 7.进行遍历
for (File file : files) {
// 8.判断是目录还是文件
if(file.isDirectory()){
// 9.是目录 , 递归调用重新创建子目录
copyFolders(file , parent);
}else {
// 10.是文件进行文件的复制
// 11.拼接文件的目录和名称
File dest_file = new File(parent, file.getName());
// 12.进行文件的复制
copyFile(file , dest_file);
}
}
}
private static void copyFile(File file, File dest_file) {
try {
// 13.创建输入流对象
FileInputStream fis = new FileInputStream(file);
// 14.创建输出流对象
FileOutputStream fos = new FileOutputStream(dest_file);
// 15.创建读取文件的数组
byte[] bytes = new byte[1024];
// 16.定义一次读取数组的长度
int len = 0;
// 17.使用循环进行读取
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes , 0, len);
}
// 18.读取结束,关闭输入流和输出流
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
copyFolders(src , dest)方法是递归需要执行的方法,如果是文件的目录就生成目录,如果是文件就复制。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |