1.深度优先(递归)
public class Demo { public static long size = 0; private static void getSize(File[] fileArr) { if (null == fileArr || fileArr.length <= 0)//部分文件夹 无权限访问,返回null { return; } for (File file : fileArr) { if (file.isFile()) { size += file.length(); } if (file.isDirectory()) { getSize(file.listFiles()); } } } public static void main(String[] args) { long start = System.currentTimeMillis(); File file = new File("D:\\"); getSize(file.listFiles()); System.out.println(file.getPath() + "---" + size + "字节"); long end = System.currentTimeMillis(); long elapsed = end - start; System.out.println("一共花了:" + elapsed + " 毫秒"); } }
2.广度优先
public class Directory { public static LinkedList<File> files = new LinkedList<>(); public static void put(File folder) { File[] fileArr=folder.listFiles(); if (null == fileArr || fileArr.length <= 0) //某些文件夹无权限访问,会返回null { return; } for (File file : fileArr) { files.add(file); } } public static void main(String[] args) { long start = System.currentTimeMillis(); long size = 0; File file = new File("D:\\"); files.add(file); while (true) { if (files.isEmpty()) break; File fileTemp = files.getLast(); if (fileTemp.isFile()) { size += fileTemp.length(); files.removeLast(); } if (fileTemp.isDirectory()) { put(files.removeLast()); } } System.out.println(file.getPath() + "---" + size + "字节"); long end = System.currentTimeMillis(); long elapsed = end - start; System.out.println("一共花了:" + elapsed + " 毫秒"); } }
本文介绍了两种目录遍历算法,深度优先搜索(DFS)通过递归实现,而广度优先搜索(BFS)则使用队列结构。这两种算法分别用于计算指定目录下所有文件的总大小,展示了在文件系统操作中如何有效遍历目录结构。
1072

被折叠的 条评论
为什么被折叠?



