File中经常会使用递归方法打印属性结构、统计文件夹下文件个数、子文件夹个数以及文件大小,可以作为递归的应用练习。
递归的写法,百度一搜一大堆,这里我使用对javabean方式封装了一下:
package com.xzlf.io;
import java.io.File;
public class TestCount {
private String dir;//文件夹
private int length;//文件夹大小
private int size;//文件个数
private int dirsize = -1;//文件夹个数,只统计子文件夹个数
public TestCount(String dir) {
super();
this.dir = dir;
}
public int getLength() {
return length;
}
public int getSize() {
return size;
}
public int getDirsize() {
return dirsize;
}
/**
* 递归遍历文件夹
* @param dir
* @param deep
*/
public void printDir(File dir,int deep) {
for (int i = 0; i < deep; i++) {
System.out.print("-");
}
System.out.println(dir.getName());
if(null == dir || !dir.exists()) {
return;
}else if(dir.isDirectory()) {
dirsize++;
File[] listFiles = dir.listFiles();
for(File f : listFiles) {
printDir(f, deep + 1);
}
}
}
/**
* 统计文件夹大小、子文件夹和文件个数
* @param dir
*/
public void countDir(File dir) {
if(dir != null && dir.exists()) {
if(dir.isFile()) {
size++;
length += dir.length();
}else {
File[] listFiles = dir.listFiles();
for (File f : listFiles) {
countDir(f);
}
}
}
}
public static void main(String[] args) {
TestCount tc = new TestCount("D:\workspace_eclipse_2019_12\fuxi\reDo");
File f = new File(tc.dir);
tc.printDir(f, 0);
tc.countDir(f);
System.out.printf("文件个数:%d%n文件夹大小:%d%n文件大小:%d%n",
tc.getSize(),tc.getDirsize(),tc.getLength());
}
}
运行测试: