package com.heima.递归练习;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class Test3 {
/**
* 3,从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
* 从键盘接收两个文件夹路径,
* 分析:
* 1.创建键盘录入对象
* 2,将录入的文件夹路径封装成路径对象
* 3,判断路径是否存在,是否是文件夹路径,是就返回
* 把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
* 1,创建File数组方便获取文件夹和文件
* 2,遍历数组
* 3.判断数组元素,如果是文件就读写,如果是文件夹就递归
* @throws IOException
*
*/
public static void main(String[] args) throws IOException {
long l = System.currentTimeMillis();
File file = getDir();
File file2 = getDir();
if(file.equals(file2)){
System.out.println("目标文件夹是源文件夹的子文件夹");
}else{
copy(file,file2);
}
System.out.println((System.currentTimeMillis()-l)/1000);
}
/**
*返回值类型 File
*无参数
*/
public static File getDir(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入文件夹路径");
while(true){
String line = sc.nextLine();
File file = new File(line);
if(!file.exists()){
System.out.println("请输入存在的文件夹路径");
}else if(file.isFile()){
System.out.println("请输入文件夹路径");
}else{
return file;
}
}
}
/**
* 返回值类型void
* 参数列表 File file , File fi
* @throws IOException
* @throws IOException
*/
public static void copy(File fi , File file) throws IOException{
//在目标文件夹中创建源文件夹
File dir = new File(file , fi.getName());
dir.mkdir();
//江源文件夹中的文件和文件夹存储在File数组中
File[] arr = fi.listFiles();
//遍历数组
for (File file2 : arr) {
//判断是文件还是文件夹,是文件直接复制,是文件夹就直接递归调用
if(file2.isFile()){
//创建字节缓冲流读写文件
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file2));
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File(dir,file2.getName())));
int b ;
while((b = bis.read())!= -1){
bos.write(b);
}
//关流
bis.close();
bos.close();
}else{
copy(file2,dir);
}
}
}
}
|
|