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 + " 毫秒"); } }