• 给你一个文件夹,统计其下面的文件数量,包括子文件夹下面的文件


    对于统计一个文件夹下面的文件的数量,大家第一反应肯定是递归调用来实现,现在有这么一个目录结构:root1和root2下面各有一个文件file1.txt和file2.txt,所以最终统计出来的文件数量应该是3

    我们先看看递归实现:

    1. public static void countFiles(File file) {
    2. File[] files = file.listFiles();
    3. for (File file1 : files) {
    4. if (file1.isFile()) {
    5. fileCount++;
    6. } else {
    7. countFiles(file1);
    8. }
    9. }
    10. }
    11. @Test
    12. public void testCountFiles() {
    13. File root = new File("E:\\root");
    14. countFiles(root);
    15. System.err.println(fileCount);
    16. }

    那么除了递归的方式,还有没有其他方法呢,答案是肯定的,我们知道递归的本质其实是在jvm的栈上分配方法栈帧,而jdk恰到好处的为我们提供了栈的实现,也就是java.util.Stack,那么就可以利用它来实现文件数量的统计了,直接看代码:

    1. public static int countFile(File file) {
    2. int count = 0;
    3. Stack<File> stack = new Stack<>();
    4. stack.add(file);
    5. while (!stack.isEmpty()) {
    6. File pop = stack.pop();
    7. if (pop.isFile()) {
    8. count++;
    9. }
    10. if (pop.isDirectory()) {
    11. File[] files = pop.listFiles();
    12. for (File file1 : files) {
    13. stack.add(file1);
    14. }
    15. }
    16. }
    17. return count;
    18. }
    19. @Test
    20. public void testStack() {
    21. File root = new File("E:\\root");
    22. System.err.println(countFile(root));
    23. }

    ps:其实这里不一定要用Stack,也可以用queue等集合都可以实现,与递归的方式相比,各有优缺点吧,如果文件夹的数量过多,递归可能会导致StackOverflow,第二种方式可能会导致oom

  • 相关阅读:
    怎么将本地代码文件夹通过Git 命令上传到启智平台仓库
    Java基础-JVM:垃圾回收算法与垃圾收集器
    唐迟阅读笔记
    iPhone手机记笔记工具选择用哪个
    微信@all bug复现及原理分析
    Vue入门与介绍(初学必看)
    〔020〕Stable Diffusion 之 骨骼姿势 篇
    TP5 封装通用的微信服务类
    希尔排序(Shell Sort)
    web3.0入门及学习路径
  • 原文地址:https://blog.csdn.net/qq_17805707/article/details/133877449