java递归删除文件夹以及复制文件夹

1. 递归删除多级文件

	 * 利用递归删除多级目录结构
	 * 
	 *  1:根目录结构是a
	 *  2:判断节点是否是目录
	 *  3:如果是文件,直接删除
	 *  4:如果不是文件,遍历目录
	 *  5:判断遍历后的每一个子节点是否为文件夹,如果不是文件夹,直接删除,如果是文件夹,继续
	 */
	
public static void deleteFile(File file){
	//1:判断目录是否存在
	if(file.exists()){
		//1:判断是否是文件夹
		if(file.isDirectory()){
			//2 获取文件数组
			File[] file2 = file.listFiles();
			//3 遍历文件夹
			for (File file3 : file2) {
				//4:将遍历出来的文件以及目录传入方法中
				deleteFile(file3);
			}
		}
		//直接删除文件
		file.delete();
	}
}

2. 复制文件夹

/**
 * 复制文件夹操作
 * @param sourceDir 源文件夹
 * @param destDir 目标文件夹
 * @throws FileNotFoundException 
 */
public static void copyDir(File sourceFile, File destFile) throws FileNotFoundException {
	// 1.判断源文件是否存在
	if(!sourceFile.exists()) {
		throw new FileNotFoundException("源文件夹不存在!");
	}
	// 2.如果目标文件不存在,则新建目标文件夹
	if(!destFile.exists()) {
		destFile.mkdirs(); 
	}
	// 3.获取源文件夹中所有的子文件(包含文件和文件夹)
	File[] files = sourceFile.listFiles();
	for(File file : files) {
		// 3.1如果是文件,则直接复制文件即可
		if(file.isFile()) {
			// 执行拷贝文件操作
			copyFile(file, new File(destFile, file.getName()));
		}
		// 3.2如果是文件夹,则递归调用
		else {
			copyDir(file, new File(destFile, file.getName()));
		}
	}
}

/**
 * 文件拷贝
 * @param sourceFile 需要拷贝的文件
 * @param destFile 把文件拷贝到哪里去
 */
public static void copyFile(File sourceFile, File destFile) {
	BufferedInputStream bis = null;
	BufferedOutputStream bos = null;
	try {
		// 1.文件输入流
		FileInputStream fis = new FileInputStream(sourceFile);
		bis = new BufferedInputStream(fis);
		// 2.文件输出流
		FileOutputStream fos = new FileOutputStream(destFile);
		bos = new BufferedOutputStream(fos);
		// 3.读取数据
		byte[] by = new byte[1024];
		int len = 0;
		while((len = bis.read(by)) != -1) {
			// 4.写入数据
			bos.write(by, 0, len);
		}
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		if(bos != null) {
			try {
				bos.close(); // 关闭输出流
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		if(bis != null) {
			try {
				bis.close(); // 关闭输入流
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

public static void main(String[] args) {
	// 要复制的文件对象
	File sourceDirFile = new File("E:\\JAVA1");
	//复制的位置
	File destDirFile = new File("E:\\JAVA2");
	try {
		copyDir(sourceDirFile, destDirFile);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值