AJPFX:实现递归统计文件夹的总大小
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
AJPFX:实现递归统计文件夹的总大小的更多相关文章
- linux如何查看目录或文件夹的总大小--du命令
记录一下如何查看一个目录或文件夹的总大小. 使用du命令的选项-s,可以统计整个目录或文件夹的大小. 例如 du -sk ./ 156k -k表示以KB为单位计算.
- java基础 File 递归删除文件夹中所有文件文件夹 目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数
File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ...
- 统计文件夹下java代码行数的小程序--主要是学习任务队列的思想
首先感谢czbk的老师,录制的视频,让我们有这么好的学习资料.……—— 统计文件夹java文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...
- linux统计文件夹大小
统计总大小: du -sh dirname 统计文件夹内部各文件大小及总大小: du -h dirname
- ls命名 | Linux统计文件夹内的文件个数
ls命名 man ls -R 递归列出全部的目录内容 recusive -a 列出所有的文件(包括以 . 开头的隐藏文件) all -r 逆序排列 reverse -t 按照时间信息排序 time - ...
- 【File】递归删除文件夹中子级文件/夹,并删除文件夹
今天有这样一个需求,需要删除某一个文件夹,但是文件夹中还有子级的文件 或者还可能会有文件夹在里面,所以就需要使用一个简单的递归才能将文件夹删除成功,包括文件夹中的子级文件/夹.!!! 其实很简单,就一 ...
- python (9)统计文件夹下的所有文件夹数目、统计文件夹下所有文件数目、遍历文件夹下的文件
命令:os 用到的:os.walk os.listdir 写的爬虫爬的数据,但是又不知道进行到哪了,于是就写了个脚本来统计文件的个数 #统计 /home/dir/ 下的文件夹个数 import o ...
- [C#]递归遍历文件夹
/// <summary> /// 递归获取文件夹目录下文件 /// </summary> /// <param name="pathName"> ...
- Linux统计文件夹下文件信息
统计当前文件夹里面有多少文件,即统计文件个数 ls -l |grep "^-"|wc -l 统计当前文件夹里面有多少文件夹,即统计文件夹个数 ls -l |grep "^ ...
随机推荐
- 动态预览Xib的实现
写一个TestView继承于UIView,然后写个对应的xib,把xib的名字设置成TestView,这是标准的用xib加载这个view必须得条件 然后xib里把这个View的backgroundCo ...
- 前端模块化开发的规范:AMD与CDM
AMD, 异步模块定义. CMD,通用模块规范.
- android user 版本如何默认adb调试为打开【转】
本文转载自:http://blog.csdn.net/chaihuasong/article/details/50342119 A. 软件准备 user版本需要先打开USB debug开关,打开方式如 ...
- iOS成员变量、实例变量、属性变量三者的联系与区别
一.类Class中的属性property 在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是 ...
- 【197】PowerShell 通过 FTP 下载文件
参考:使用 WGET 从FTP上下载文件 在 PowerShell 使用 wget2 工具,代码如下: wget2 ftp://user:password@192.168.14.31/1.jpg 其中 ...
- notepad++的NppFTP插件远程连接linux操作系统
1.首先要有NppFTP插件,如果没有可以去下面链接或者其他网站下载: https://sourceforge.net/projects/nppftp/files/latest/download ...
- find 是区分大小写的。对于不区分大小写的写法(转载)
转自:http://justwinit.cn/post/3633/ 默认情况下,find 是区分大小写的.对于不区分大小写的 find,将 -iname 测试替换为 -name 测试. find do ...
- iOS Button选中与取消
/** * 是否点击 */ @property (nonatomic ,assign) BOOL selected; /** * button 点击事件选中取消选中 */ - (void)handl ...
- U3D 的一些基础优化
1.在使用数组或ArrayList对象时应当注意 [csharp] view plaincopy length=myArray.Length; for(int i=0;i<length;i++) ...
- bzoj 1823: [JSOI2010]满汉全席【2-SAT+tarjan】
因为每种食材只有一份,所以两个评委的如果有要求同一种食材的两种做法就是不可行,用这个来建立2-SAT模型 然后跑tarjan判可行性即可 #include<iostream> #inclu ...