应用:用面向对象的方法和File对象对传入的文件夹进行大小统计
已知:文件夹(C:/Users/Lenovo/eclipse-workspace/IOstudy)大小为7819;
文件夹(C:/Users/Lenovo/eclipse-workspace/IOstudy/src)大小为2775;
原来的代码:
package shanqiu;
import java.io.File;
/**
- 使用递归打印子孙级目录和文件的名称
- 使用面向对象:统计文件夹大小,增加泛用性
- @author Lenovo
*/
public class TestFile {
//面向对象方式实现统计文件夹大小
//大小
private static long len;
//路径
public String path;
//数据源
public File src1;
public TestFile(String path) {
super();
this.path = path;
this.src1 = new File(path);
count(this.src1);
}
// 统计文件夹大小
private static void count(File src) {
if(src != null && src.exists()) {
if(src.isFile()) {
len += src.length();
}else {
for(File s:src.listFiles()) {
count(s);
}
}
}
}
public static long getLen() {
return len;
}
public static void main(String[] args) {
File src = new File("C:/Users/Lenovo/eclipse-workspace/IOstudy");
TestFile src1 = new TestFile("C:/Users/Lenovo/eclipse-workspace/IOstudy");
System.out.println(src1.getLen());
TestFile src2 = new TestFile("C:/Users/Lenovo/eclipse-workspace/IOstudy/src");
System.out.println(src2.getLen());
}
运行代码,发现输出为:
7819
10594
**可以发现:第二行本应输出IOstudy文件夹下子文件夹src的大小,结果输出是两个文件夹大小的和。
原因在于:TestFile类变量len的属性为static,即静态变量,静态变量的生命周期伴随类的始终(见java笔记第3页)。所以在构造TestFile对象src2的时候,静态变量len中仍然存有count(src1)的结果,所以第二行的输出是两个文件夹的大小之和。
解决办法:将len的变量类型改为成员变量,成员变量的生命周期伴随对象始终,所以能够正确显示子文件夹src的大小。
**