java - 访问第一级目录并获取每个目录的大小 Java

标签 java java-8

我需要 C: 中的目录列表,并获取每个目录的大小。 我正在尝试使用这段代码:

int[] count = {0};
try {
    Files.walkFileTree(Paths.get(dir.getPath()), new HashSet<FileVisitOption>(Arrays.asList(FileVisitOption.FOLLOW_LINKS)),
            Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {
                @Override
                public FileVisitResult visitFile(Path file , BasicFileAttributes attrs) throws IOException {
                    System.out.printf("Visiting file %s\n", file);
                    ++count[0];

                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult visitFileFailed(Path file , IOException e) throws IOException {
                    System.err.printf("Visiting failed for %s\n", file);

                    return FileVisitResult.SKIP_SUBTREE;
                }

                @Override
                public FileVisitResult preVisitDirectory(Path dir , BasicFileAttributes attrs) throws IOException {
                     System.out.printf("About to visit directory %s\n", dir);
                    return FileVisitResult.CONTINUE;
                }
            });
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} 

我遇到的问题是,如果我完全使用它,会花费很多时间,因为它会访问每个文件!的磁盘。我尝试了 FileVisitResult 的不同选项,但无法获得所需的结果。我只需要第一级磁盘空间。 在此先感谢您的帮助。

最佳答案

文件夹没有自己的(显着)大小。通常在讨论文件夹大小时,其含义是该文件夹及其子文件夹下所有文件的大小总和。对于 C:\(尝试右键单击您的 Program Files 文件夹并点击属性),此操作需要“很长”的时间。删除所有日志并重试。将您的代码所花费的时间与 Windows 资源管理器计算该大小所花费的时间进行比较(同样,通过右键单击您的 Program Files 文件夹并点击属性)。

无论如何,Apache 的 commons-io 都有一个单行代码:

long size = FileUtils.sizeOfDirectory(folder);

Java-8 还有另一个“纯”单行代码:

long size = Files.walk(Paths.get("C:\\"))
      .filter(p -> p.toFile().isFile())
      .mapToLong(p -> p.toFile().length())
      .sum();

关于java - 访问第一级目录并获取每个目录的大小 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55830126/

相关文章:

java - 从 JAXWS-RI 调用 .NET Web 服务(WSE 3.0、WS-Security)

java - 读取文件时出现 EOFException

java - 从大字符串中获取特定的子字符串

java - 将当前 UTC 时间的日期时间插入数据库

java - 安装 JDK 8_251 但一直显示 7.0_7

java - 将带有方法引用的 lambda 转换为 Java 7 中的函数

java - 没有 pull 的Git推送

java - 使用 sunpkcs#11 和 tomcat 移除和插入智能卡

java - 流分组后如何聚合分组实体

xml - 错误 : Could not find or load main class com. sun.tools.internal.xjc.XJCFacade