黑马程序员技术交流社区
标题:
递归统计文件夹大小
[打印本页]
作者:
即墨
时间:
2016-5-22 23:57
标题:
递归统计文件夹大小
package com.heima.test;
import java.io.File;
import java.util.Scanner;
public class Test01 {
/**
* 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小
* 从键盘接收一个文件夹路径
* 1.创建文本扫描器对象
* 2.创建死循环,判断文件路径:创建文件路径对象,接受文本扫描器输入
* 3.判断文件路径是否存在,不存在提示用户
* 4.判断文件路径是否是文件夹,是文件夹提示用户
* 5.如果文件路径是文件夹,跳出循环
*
* 统计该文件夹大小
* 1.获取文件夹下所有文件路径数组。
* 2.判断你文件数组是否为null,是null提示用户无法访问并返回。
* 3.遍历文件路径数组下的所有文件路径。
* 4.如果是文件夹,进入递归调用
* 5.如果是文件,累加大小
* 6.返回最后累加的大小
*/
public static void main(String[] args) {
File dir = getDir();
System.out.println(getFileLength(dir));
}
/**
*
* @Title: getDir
* @Description: 获取一个可用的文件夹路径
* @param @return 设定文件
* @return File 返回类型
* @throws
*/
public static File getDir() {
//1.创建文本扫描器对象
Scanner sc = new Scanner(System.in);
//2.创建死循环,判断文件路径:创建文件路径对象,接受文本扫描器输入
File dir = null;
while (true) {
System.out.println("请输入一个文件夹路径:");
String line = sc.nextLine();
dir = new File(line);
if (!dir.exists()) {
System.out.println("文件路径不存在,请重新输入。");
} else if (dir.isFile()) {
System.out.println("文件路径是文件,不是文件夹,请重新输入。");
} else {
break;
}
}
return dir;
}
/**
*
* @Title: getFileLength
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param @param dir
* @param @return 设定文件
* @return long 返回类型
* @throws
*
* 1.获取文件夹下所有文件路径数组。
* 2.判断你文件数组是否为null,是null提示用户无法访问并返回。
* 3.遍历文件路径数组下的所有文件路径。
* 4.如果是文件夹,进入递归调用
* 5.如果是文件,累加大小
* 6.返回最后累加的大小
*/
public static long getFileLength(File dir) {
//1.获取文件夹下所有文件路径数组。
File[] files = dir.listFiles();
long length = 0;
//2.判断你文件数组是否为null,是null提示用户无法访问并返回。
if (files == null) {
System.out.println("文件夹路径无法访问。");
return 0;
}
//3.遍历文件路径数组下的所有文件路径。
for (File f : files) {
if (f.isDirectory()) {
//4.如果是文件夹,进入递归调用
length += getFileLength(f);
} else {
//如果是文件,累加大小
length += f.length();
}
}
//6.返回最后累加的大小
return length;
}
}
复制代码
作者:
Roman
时间:
2017-5-17 21:03
加强for里面判断是文件夹重走get方法不就重新定义了length=0吗?为什么还能累加
作者:
小肥罗啊
时间:
2017-6-16 14:13
Roman 发表于 2017-5-17 21:03
加强for里面判断是文件夹重走get方法不就重新定义了length=0吗?为什么还能累加 ...
同问。但是结果是正确的...
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2