zoukankan      html  css  js  c++  java
  • java获取指定文件夹下文件个数和文件总大小(使用递归方式和循环方式分别计算)

     1 import java.io.File;
     2 import java.util.Arrays;
     3 import java.util.Stack;
     4 
     5 public class TestStack {
     6     public static void main(String[] args) {
     7         String path = "/mnt/dev/test";
     8         long start = System.currentTimeMillis();
     9         long[] result = loop(path);         //循环方式 五次分别耗时  174 ms, 248 ms, 293 ms, 185 ms, 173 ms
    10 //        long[] result = recursion(path);   //递归方式 五次分别耗时  197 ms, 226 ms, 207 ms, 212 ms, 294 ms
    11         System.out.println(Arrays.toString(result));
    12         long end = System.currentTimeMillis();
    13         System.out.println("total time :" + (end - start) + " ms");
    14     }
    15 
    16     /**
    17      * 循环 获取指定目录下文件个数和文件大小
    18      *
    19      * @param path
    20      * @return long[fileCount, dataSize(byte)]
    21      */
    22     public static long[] loop(String path) {
    23         File file = new File(path);
    24         Stack<File> stack = new Stack<File>();
    25         stack.push(file);
    26         long fileCount = 0;
    27         long dataSize = 0;
    28         while (!stack.isEmpty()) {
    29             File child = stack.pop();
    30             if (child.isDirectory()) {
    31                 // 排除隐藏目录
    32                 if (!child.isHidden() && !child.getName().startsWith(".")) {
    33                     for (File f : child.listFiles()) stack.push(f);
    34                 }
    35             } else if (child.isFile()) {
    36                 // 排除隐藏文件
    37                 if (!child.isHidden() && !child.getName().startsWith(".")) {
    38                     fileCount += 1;
    39                     dataSize += child.length();
    40                 }
    41             }
    42         }
    43         return new long[]{fileCount, dataSize};
    44     }
    45 
    46     /**
    47      * 递归 获取指定目录下文件个数和文件大小
    48      *
    49      * @param path
    50      * @return long[fileCount, dataSize(byte)] byte
    51      */
    52     public static long[] recursion(String path) {
    53         File files = new File(path);
    54         if (files.isFile()) {
    55             // 排除隐藏文件或目录
    56             if (!files.isHidden() && !files.getName().startsWith(".")) {
    57                 return new long[]{1, files.length()};
    58             } else {
    59                 return new long[]{0, 0};
    60             }
    61         }
    62         long[] result = new long[]{0, 0};
    63         for (File file : files.listFiles()) {
    64             if (!file.isHidden() && !file.getName().startsWith(".")) {
    65                 long[] longs = file.isDirectory() ? recursion(file.getAbsolutePath()) : new long[]{1, file.length()};
    66                 result[0] += longs[0];
    67                 result[1] += longs[1];
    68             }
    69         }
    70         return result;
    71     }
    72 }
  • 相关阅读:
    Xcode 4.1~4.6 + iOS 5、iOS 6免证书(iDP)开发+真机调试+生成IPA全攻略
    Java程序员快速入门Go语言
    企业站常用的点击后弹出下拉菜单导航
    企业站常用漂亮横向导航菜单
    点击弹出弹性下拉菜单效果
    很酷的伸缩导航菜单效果,可自定义样式和菜单项。
    导航条点击按钮切换效果
    不错的二级导航菜单特效
    商城常用产品分类导航条
    css实现鼠标经过导航文字偏位效果
  • 原文地址:https://www.cnblogs.com/dashuai-wang/p/14922008.html
Copyright © 2011-2022 走看看