递归:每一级函数去调用自身,但每次调用函数都有自己的变量(以某种方式缩小问题的规模),并且每一次函数的调用都会有一次返回,位于递归调用前的语句(一般是递归出口)和各级被调用函数间具有相同的执行顺序,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反,当程序执行完最后一层递归调用后,参数变量满足了递归出口的条件就开始逐级返回。虽然每一级递归都有自己的变量,但是函数代码并不会得到复制。
public class Test1 {
public static void main(String[] args) {
copy(new File("D:\\idea_code"),new File("D:\\idea20333"));
}
/**
* 复制
* @param src 原文件
* @param dest 目标文件
*/
public static void copy(File src, File dest){
// 判断源文件目录是否存在
if (src != null && src.exists() && src.isDirectory()) {
// 目标目录需要创建一下
File destOne = new File(dest,src.getName());
destOne.mkdirs();
// 提取原目录下的全部一级文件对象
File[] files = src.listFiles();
// 判断是否存在一级文件对象
if (files != null && files.length > 0){
// 遍历一级文件对象
for (File file : files) {
// 判断是文件还是文件夹 是文件直接复制
if (file.isFile()){
copyFile(file,new File(destOne,file.getName()));
}else {
// 当前遍历的是文件夹 递归复制
copy(file,destOne);
}
}
}
}
}
/**
* copy 文件
* @param srcFile 源文件
* @param destFile 目标文件
*/
public static void copyFile(File srcFile,File destFile){
try(
// 1.创建一个缓冲字节输入流管道 与原文件接通
InputStream is = new FileInputStream(srcFile);
BufferedInputStream bis = new BufferedInputStream(is);
// 2.创建一个缓冲字节输出流管道与目标文件接通
OutputStream os = new FileOutputStream(destFile);
BufferedOutputStream bos = new BufferedOutputStream(os);
){
// 3.定义一个字节数组转移数据
byte[] buffer = new byte[1024];
// 记录每次读取的字节数
int len ;
while ((len = bis.read()) != -1) {
bos.write(buffer,0,len);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
168

被折叠的 条评论
为什么被折叠?



