Java(递归算法)计算文件大小和本地文件的删除

要计算文件大小和本地文件的删除,那么我们首先得了解一个概念:递归算法

递归算法:是把问题转化为规模更小的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
简单的说就是一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).我们在计算文件大小和本地文件删除的过程中就用到这个算法。

1.计算文件大小
思路:首先对文件进行判断有两种情况:第一种:是文件,那么可以直接对该文件长度进行计算;第二种:是文件夹,那么将要再次递归调用方法本身。
代码:

package com.etime3.test;

import java.io.File;

public class FileLength {

	public static void main(String[] args) {
		FileLength fileLen = new FileLength();
		File file = new File("d:\\file");// 创建一个文件对象并制定路径
		long fl = fileLen.fileLength(file);
		System.out.println(fl);

	}

	// 文件夹大小
	public long fileLength(File file) {
		long fileLen = 0;// 每次都重新计算当文件的大小后返回
		if (file.isFile()) {// 判断是否为文件
			fileLen = file.length();
			return fileLen;// 返回当文件的大小
		}
		if (file.isDirectory()) {// 判断是否为文件夹
			File[] files = file.listFiles();// 对文件遍历
			for (File f : files) { // fileLength(f);只有这个在变
				fileLen = fileLen + fileLength(f);
			} // 类似阶乘的递归,fileLen = 1+2+3+4加的是每一个return的文件大小
		}
		return fileLen;
	}

}

关键点:
方法的运行:每个方法被执行的时候,Java虚拟机都 会同步创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信 息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。运行时进栈,运行完后出栈。
在这里插入图片描述

文件是在哪里计算的呢?

每个文件的大小计算都在if (file.isFile()){}这个条件里面的fileLen = file.length();中计算的,只是在if (file.isDirectory()){}条件中的fileLen = fileLen + fileLength(f);这进行累加的,最终得出总文件的大小。

那么关于递归fileLen = fileLen + fileLength(f);是如何计算的?

fileLength(f)传递进去的如果是当文件,那么直接计算大小后就把这个文件的大小直接return返回,每个文件都会return,最终在fileLen = fileLen + fileLength(f);进行累加fileLen = fileLen + fileLen1+fileLen2+fileLen3+…,然后得到总的文件大小。

2.本地文件的删除
代码:
思路类似于计算文件大小,也是判断两次后分别进行操作,若是文件则直接删除,若是文件夹则遍历后递归调用自己,直到遍历出每个文件夹中的所有文件后单个删除。

package com.etime3.test;

import java.io.File;

public class DeleteFile {

	public static void main(String[] args) {
		DeleteFile delFile = new DeleteFile();
		String path = "d:\\file";
		delFile.deleteFile(path);

	}

	// 删除文件夹
	public void deleteFile(String path) {
		File file = new File(path);// 判断是否为文件
		if (file.isFile()) {// 判断是否为文件
			file.delete();// 删除单个文件
		}
		if (file.isDirectory()) {// 判断是否为文件夹
			File[] listFiles = file.listFiles();// 对每个文件夹中的文件遍历
			for (File f : listFiles) {
				deleteFile(f.getAbsolutePath());
			} // 递归调用自己
		}

		file.delete();// 删除每个被删除文件之后的空文件夹
	}

}

特变注意:一定要在最后编写代码file.delete();来删除每个被删除文件之后的空文件夹,因为你每次只是遍历出了文价夹中的文件后删除了里面的文件,而并没有删除该文件夹,所以必须进行这一步操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值