gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:17 27 4
gpt4 key购买 nike

我需要 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com