本文共 1359 字,大约阅读时间需要 4 分钟。
class Statistical {
public static void main(String[] args) { Scanner sc = new Scanner(System.in);//提示用户输入一个目录路径System.out.print("请输入要统计的文件夹路径:");String dirPath = sc.nextLine();//封装成文件对象File dir = new File(dirPath);/*对文件的一些判断,是否存在和是否是目录
*/if (! dir.exists()) { System.out.println("该文件路径不存在");return ;}if (dir.isFile()) { System.out.println("请指定一个目录");return ;}long count = count(dir);//获得文件总字节数System.out.println(dir.getName() + "的大小为" + transform(count));//输出文件夹大小}public static String transform(long count) {
int times = 0;while (count > 1024) { count /= 1024;times ++;}switch (times) { case 1:return count + "KB";case 2:return count + "MB";case 3:return count + "GB";case 4:return count + "TB";case 5:return count + "PB";default:return null;}}public static long count(File dir) {
File[] files = dir.listFiles();long sum = 0;for (File file : files) { if (file.isFile()) { sum += file.length();} else if (file.isDirectory()) { sum += count(file);}}return sum;}}递归是在操作文件经常会采用的一种算法,尤其是对文件夹做操作时:比如统计文件夹大小,复制文件夹,删除文件夹等,都要用到递归的算法,使用递归算法能让以前较难的逻辑简单化。
统计文件夹的大小实际上就是列出文件夹中的所有文件,统计每个文件的大小,如果是文件夹,就要再重新列出这个文件夹的所有文件,再统计。可以看出,列出文件夹的所有文件和统计文件夹是重复的动作,所以这时用递归就解决这个问题,如果是文件夹,就重新调用这个方法,把遍历到的文件夹作为参数传过去。最后就能计算出文件夹的总大小了。我还做了一个判断文件大小的这个小功能,就是能把最后计算出来的字节大小转换成适合单位的大小再打印,比如2049B 会显示2K而不是1029B转载于:https://blog.51cto.com/14314113/2395778