java - 访问第一级目录并获取每个目录Java的大小
问题描述
我需要 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 文件夹并点击属性)。
在任何情况下,Apachecommons-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();
推荐阅读
- c# - 在 datetimepicker c# 中读取自定义格式
- android - 从 KOTLIN 的图库中选择多个图像(想要图像路径)
- javascript - jquery daterange选择器在选择日期之前选择结束日期丢失结束日期选择
- amazon-web-services - 从 localhost 通过 HTTPS 访问 AWS ALB
- docker - 如何结合docker和sklearn
- django - 基于函数的视图中的 Ajax
- python - 使用与当前应用程序交互所需的功能是否意味着在烧瓶中创建视图?
- markdown - Markdown 的 SGML 解析器可能吗?
- swift - Swift 包管理器 - 未加载语音依赖项
- python - How to split array by indices where the splitted sub-arrays include the split point