5

我目前正在使用 apache-commons FileUtils.sizeOfDirectory(File file) 方法来获取目录的大小。我真正需要的是磁盘上目录的大小,这是由 Unix 下的du实用程序显示的,只是为了清楚起见。

是否可以在 Java 中获取此信息?

4

2 回答 2

8

du通过递归整个目录树并添加它找到的所有文件的大小来查找此信息。(在将每个文件大小四舍五入到我认为的分配单元之后,它如何找出分配单元是我不知道的)。

您将必须这样做,或者生成一个外部du进程来为您执行此操作。

于 2012-10-29T10:03:09.383 回答
2

您需要递归搜索文件夹树。

如果您使用的是 Java 7,它又好又快。

Files.walkFileTree(file.toPath(), new SimpleFileVisitor<Path>(){
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        size += attrs.size();
        return super.visitFile(file, attrs);
    }
 });

在 Java 6 中,您需要File.listFiles()递归使用并手动检查每个文件的大小。请注意,虽然这非常慢。因此,如果您正在查看大量文件,则可能值得找到一个产生外部命令的解决方案。

于 2012-10-29T11:56:42.330 回答