Java递归遍历删除拷贝文件以及获取文件夹大小

package com.fwd.digui;

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

	public static void main(String[] args) throws IOException {
		System.out.println("输入要复制的文件夹");
		File src = getDir();
		System.out.println("输入要复制到目标目录");
		File dest = getDir();
		if (src.equals(dest)) {
			System.out.println("目标文件是原文件夹");
		}else{
			copy(src,dest);
		}
	}
	
	/**
	 * 统计文件的大小长度
	 * @param dir
	 * @return
	 */
	public static long getFileLength(File dir) {
		//定义一个求和变量
		long length = 0;
		File[] files = dir.listFiles(); //获取该路径下的所有文件夹以及文件 listFiles();
		for (File file : files) {
			if (file.isFile()) {
				length += file.length();
			}else{
				length = length+getFileLength(file);
			}
		}
		return length;
	}

	/**
	 * 递归删除文件夹,以及文件
	 * @param dir
	 */
	private static void deleteFile(File dir) {
		File[] list = dir.listFiles(); //获取目标文件夹下所有的文件和文件夹数组
		for (File subFiles : list) {	//遍历
			if (subFiles.isFile()) {	//判断
				subFiles.delete(); //是文件就删除
			}else{
				deleteFile(subFiles); //是文件夹就遍历
			}
		}
		dir.delete();
	}

	
	/**
	 * 文件复制
	 * @param src 原文件夹
	 * @param dest 目标文件夹
	 * @throws IOException
	 */
	private static void copy(File src, File dest) throws IOException {
		//在目标文件夹中创建源文件夹
		File newDir = new File(dest,src.getName());
		newDir.mkdir();
		//遍历目标文件夹,获取目标文件夹中的文件以及文件夹
		File[] subFiles = src.listFiles(); //获取目标文件夹下的所有文件夹以及文件,返回的是一个File的数组
		for (File subFile : subFiles) {	//遍历数组
			if (subFile.isFile()) {//判断是文件,就用IO流读取
				BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));
				//将读取的文件用IO流写到要复制到目标文件
				BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(newDir,subFile.getName())));
				int len;
				while((len = bis.read())!=-1){
					bos.write(len);
				}
				bis.close();//关流
				bos.close();
			}else{
				//否则是是文件夹就调用递归
				copy(subFile, newDir); //遍历是文件夹就是根目录 ,目标就是新创建的newDir
			}
			
		}
		
	}

	/**
	 * 获取文件夹路径
	 * @return 
	 */
	private static File getDir() {
		Scanner sc = new Scanner(System.in);
		while(true){
		String line = sc.nextLine();
		File dir = new File(line);
			if (!dir.exists()) {
				System.out.println("文件夹路径不存在");
			}else if(dir.isFile()){
				System.out.println("输入的路径是文件");
			}else{
				return dir;
			}
		}
	}
	
	

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值