欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

将一个文件夹的内容拷贝到另一个文件夹中

程序员文章站 2022-03-04 14:24:15
...

从键盘接收一个文件夹路径,将一个文件夹的内容拷贝到另一个文件夹中

package com.wang.test;

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 Copy {

	public static void main(String[] args) throws IOException {
		File src = getDir();
		File dest = getDir();
		
		if(src.equals(dest)) {
			System.out.println("目标文件夹是源文件夹的子文件夹");
		}else {
			copy(src,dest);			
		}
	}

	/**
	 * 从键盘接受一个文件夹路径
	 * 1、返回值类型File
	 * 2、参数列表无
	 */
	public static File getDir() {
		//1、创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个文件夹路径:");
		//2、无限循环
		while(true) {
			//3、获取键盘录入的结果并将其封装成File对象
			String line = sc.nextLine();
			File dir = new File(line);
			// 4、对File对象进行判断
			if(!dir.exists()) {
				System.out.println("您输入的文件夹路径不存在,请重新输入:");
			}else if(dir.isFile()) {
				System.out.println("您输入的是一个文件路径,请重新输入:");
			}else {
				//5、将文件夹路径返回
				return dir;
			}
		}
	}
	
	
	/**
	 * 把其中一个文件夹的内容拷贝到另一个文件夹中
	 * 1、返回值类型void
	 * 2、参数列表File src, File dest
	 * @throws IOException 
	 */
	public static void copy(File src, File dest) throws IOException {
		//1、在目标文件夹中创建原文件夹
		File newDir = new File(dest, src.getName());
		newDir.mkdir();
		//2、获取原文件夹中所有的文件和文件夹,存储在File数组中
		File[] subFiles = src.listFiles();
		//3、遍历数组
		for (File subFile : subFiles) {
			//4、判断是文件就用io流读写(io流只能读写文件,不能读写文件夹)
			if(subFile.isFile()) {
				BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));
				BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(newDir,src.getName())));
				
				int b;
				while((b = bis.read()) != -1) {
					bos.write(b);
				}
				bis.close();
				bos.close();
			}else {
				//5、判断是文件夹,递归调用
				copy(subFile, newDir);
			}
		}
	}
}