目录
题目:*18.28 (非递归目录大小)
不使用递归改写程序清单18-7
-
习题思路
- ( getSize方法)
- 创建一个变量表示总共的大小。
- 传入路径,创建File文件。
- 创建ArrayList<File>列表,并添加传入的文件。
- 如果列表不为空,则进入wile循环。
- 再新建一个ArrayList<File>存储子文件和目录
- 用for循环遍历每一个子文件/目录。
- 如果遍历元素是一个目录
- 遍历这个目录,如果遍历元素是文件则累加文件大小,如果是目录则添加到步骤4.1新建的目录中。
- 如果遍历元素是文件则累加文件大小。
- 如果遍历元素是一个目录
- 将步骤4.1中的列表转移到步骤2的列表中(这个步骤要在while循环内)
-
代码示例
编程练习题18_28NonRecursiveDirectorySize.java
package chapter_18;
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;
public class 编程练习题18_28NonRecursiveDirectorySize {
public static void main(String[] args) {
System.out.print("Enter a directory or a file: ");
Scanner input = new Scanner(System.in);
String directory = input.nextLine().replaceAll("\\\\", "//");
System.out.println(getSize(new File(directory)) + " bytes");
input.close();
}
public static long getSize(File file) {
long size = 0;
ArrayList<File> files = new ArrayList<File>();
files.add(file);
while(!files.isEmpty()) {
ArrayList<File> newList = new ArrayList<File>();
for(File f : files) {
if(f.isFile())
size += f.length();
else {
File[] fileList = f.listFiles();
if(file != null) {
for(File f2:fileList){
if(f2.isDirectory())
newList.add(f2);
else size += f2.length();
}
}
}
}
files = newList;
}
return size;
}
}
-
输出结果
Enter a directory or a file: C:\Users\Lenovo\eclipse-workspace\JavaFX
21530663 bytes
标签:练习题,18.28,遍历,Java,file,ArrayList,File,目录,files
From: https://blog.csdn.net/2301_78998594/article/details/142331033