package cn.tedu.homework;
import java.io.File;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;
/**
* 列出指定文件夹里的所有资源
* 如果是文件夹,就打印文件夹名称
* 如果是文件,就求总字节量
* 相当于linux命令:ls -alh
*/
public class Dir {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入要遍历的文件夹:");
File file = new File(sc.next());
fileRecursion(file);
}
/**
* 遍历文件夹及里面的文件
* @param file
*/
public static void fileRecursion(File file) {
if (!file.exists()) {
System.err.println("此路径不存在");
return;
} else if (file.isDirectory()) {
File[] listFiles = file.listFiles();
if (listFiles != null) {
for (int i = 0; i < listFiles.length; i++) {
if (listFiles[i].isFile()) {
System.out.println(listFiles[i].getName() + '\t' + fileSize(listFiles[i].length()));
} else {
// 如果是文件夹,打印文件夹的路径,并进去
System.out.println(listFiles[i].getAbsolutePath());
fileRecursion(listFiles[i]);
}
}
}
} else {
System.out.println(file.getName() + '\t' + fileSize(file.length()));
}
}
/**
* 求大小,根据大小使他显示不同的单位
* @param length
* @return String
*/
private static String fileSize(long length) {
BigDecimal size = new BigDecimal(length + "");
BigDecimal divisor = new BigDecimal(1024 + "");
if(length >= 1024 * 1024 * 1024){
return size.divide(divisor, 2, RoundingMode.HALF_UP)
.divide(divisor, 2, RoundingMode.HALF_UP)
.divide(divisor, 2, RoundingMode.HALF_UP) + "GB";
}else if(length >= 1024 * 1024){
return size.divide(divisor, 2, RoundingMode.HALF_UP)
.divide(divisor, 2, RoundingMode.HALF_UP) + "MB";
}else if(length >= 1024) {
return size.divide(divisor, 2, RoundingMode.HALF_UP) + "KB";
}
return length + "B";
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/141931.html