package com.heima.demo;
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 Test222 {
/**
* 从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File inputFile = getFile(); //接收用户输入的源文件夹路径
File outputFile = outFile(); //接收用户输入的目的文件夹路径
copyFile(inputFile,outputFile); //调用复制文件夹方法
}
//获取用户输入的文件夹
public static File getFile() {
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;
}
}
}
//获取用户输入的目的地文件夹路径
public static File outFile() {
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;
}
}
}
//拷贝一个文件夹到另外一个文件夹
public static void copyFile(File inputFile,File outputFile) throws IOException {
File[] inputArr = inputFile.listFiles(); //定义文件数组,接收传入文件夹下所有文件和文件夹的File对象
for (File file : inputArr) { //遍历文件数组
if (file.isFile()) { //如果元素是一个文件
String fileName = file.getName(); //获取到文件名
File copyFile = new File(outputFile,fileName); //关联输出路径和文件名为File实例
copyFile.createNewFile(); //创建新的文件
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(copyFile));
byte[] bys = new byte[1024*8];
int len;
while ((len = bis.read(bys)) != -1) { //当读取到的字节不为-1,一直读取
bos.write(bys,0,len); //写数据
}
bis.close(); //关闭输入流
bos.close(); //关闭输出流
}else if (file.listFiles().length == 0) { //如果是一个空文件夹
String fileName = file.getName(); //获取文件夹名
File copyEmptyFile = new File(outputFile,fileName);//根据输出路径和空文件夹名创建File实例
copyEmptyFile.mkdir(); //生成文件夹
}else { //如果是带内容的文件夹
String fileName = file.getName(); //获取文件夹名
File copyFiles = new File(outputFile,fileName);//根据输出路径和文件夹名创建File实例
copyFiles.mkdir(); //生成文件夹
copyFile(file,copyFiles); //调用自身方法,进行递归
}
}
}
} |
|