//代码如下:这里使用递归调用
import java.io.File;
import java.io.FileNotFoundException;
/**
* @author aquawius
* @create 2021-02-22 13:05
*/
public class FilesExer {
static int allFilesNum = 0;//文件总数
static int allDirectoryNum = 0;//文件夹总数
static int canNOTReadNum = 0;//不可读文件夹,(里面的文件读不到)
public static void main(String[] args) throws FileNotFoundException {
long startTime = System.currentTimeMillis();
FilesExer filesExer = new FilesExer();//主类实例化
String target = "C:\\";
File filelist = new File(target);
System.out.println("访问目录是 " + target);
int[] ints = filesExer.getFiles(filelist);
System.out.println("共" + ints[0] + "个文件");
System.out.println("共" + ints[1] + "个文件夹");
System.out.println(ints[2] + " 个文件夹不可读");
long endTime = System.currentTimeMillis();
System.out.println("运行了 " + (endTime - startTime) + "ms");
}
public int[] getFiles(File f) throws FileNotFoundException {
File[] files = f.listFiles();//得到第一级文件与文件夹列表
if (f != null) {
for (File file : files) {
if (file.isFile()) {
System.out.println("File:\t\t" + file);
allFilesNum++;
continue;
}
if (file.isDirectory()) {
File[] tempList = file.listFiles(); // 获得子文件列表,很关键的一步,因为递归返回的值可能是null,这样有几层子目录,就有创建了几个Files[]子目录数组进行遍历
if (null == tempList){
canNOTReadNum++;
}
if (null != tempList) {
System.out.println("Directory:\t" + file);
allDirectoryNum++;
getFiles(file);
}
}
}
} else {
canNOTReadNum++;
}
return new int[]{allFilesNum, allDirectoryNum, canNOTReadNum};
}
}