java学习笔记之File类统计文件大小 2019/5/12

java学习笔记之File类统计文件大小

写在开头

我是一名java小白,目前在B站学习java,学习的视频是尚学堂高琪老师的java300集课程,笔记大部分参考老师的随堂笔记,我仅以博客的方式记录下我的笔记代码和一些个人见解,对一些问题的考虑可能不周全,代码也不够好看,希望大家多多包涵,有意见的也可以在下面评论,我会好好总结错误,慢慢进步的。

实例1

方式:调用递归函数实现
优点:实现简单
缺点:只能统计一个文件夹的大小

import java.io.File;

public class TestFileCount {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		File file1=new File("D:\\代码\\java300\\java\\一级目录");
		Count(file1);
		System.out.println(len);
		
	}
	private static long len;
	private static void Count(File file1) {
		// TODO 自动生成的方法存根
		if(file1.exists()&&null!=file1)
		{
			if(file1.isFile())
			{
				len=len+file1.length();
			}
			else {
				for(File f1:file1.listFiles())
				{
					Count(f1);
				}
			}
		}
	}

}

先进入文件夹看看大小:
在这里插入图片描述
输出结果(正确):
在这里插入图片描述

上面说到缺点是只能统计一个文件夹大小,因为调用递归的话,变量len只能定义为公共变量,放在递归函数外层(若放在内层,每次进入递归体,len将初始化)。放在外层意味着下一次调用Count方法,len的值还是保留上一次调用递归函数的值;下面举例子:
在main函数中统计两次同一文件夹的大小
在这里插入图片描述
结果:
在这里插入图片描述
预期结果应该是两个输出的结果相同,但是len的值翻倍,说明了第二次调用Count函数时len的值为上一次调用Count函数时遗留下来的值。

下面使用面向对象的思想改进代码:

实例2(改进实例1)

方式:同样是调用递归函数实现,但是使用了面向对象的思想
优点:使用面向对象,能够统计多个文件夹的大小
缺点:一丝丝难理解而已(开个玩笑)

public class FileCount {
	private long len;//定义文件的大小
	private String path;//定义文件的路径
	private File source;//定义源文件
	
	public FileCount(String path)//生成相应的构造方法
	{
		super();
		// TODO 自动生成的构造函数存根
		this.path=path;
		this.source=new File(path);
		Count(this.source);//调用count方法
	}
	public long getLen() //相应的get方法
	{
		return len;
	}

	private void Count(File file1)//count方法
	{
		// TODO 自动生成的方法存根
		if(file1.exists()&&null!=file1)//如果文件存在
		{
			if(file1.isFile())//如果他是个文件
			{
				len=len+file1.length();
			}
			else //如果他是文件夹
			{
				for(File f1:file1.listFiles())//在当前文件夹下,递归调用Count
				{
					Count(f1);
				}
			}
		}
	}
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		TestFileCount01 f1=new TestFileCount01("D:/代码/java300/java/一级目录");
		System.out.println(f1.getLen());
		TestFileCount01 f2=new TestFileCount01("D:/代码/java300");
		System.out.println(f2.getLen());
	}

	
}

先进入文件夹看看大小:
文件夹1.D:/代码/java300/java/一级目录
在这里插入图片描述
文件夹2.D:/代码/java300
在这里插入图片描述
输出结果(正确):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值