目录
题目:*18.28 (非递归目录大小)
习题思路
代码示例
输出结果
题目:*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