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