为了账号安全,请及时绑定邮箱和手机立即绑定

在递归目录树时计算目录大小

在递归目录树时计算目录大小

一只萌萌小番薯 2021-09-26 17:09:10
这是我在这里的第一篇文章,所以如果我做错了什么,请告诉我。此外,这是一个家庭作业。用户选择一个目录/文件夹,我的程序递归地显示所选目录下的所有文件和子目录。该程序还将显示所有文件和子目录的大小。我已经做了一切。该程序按预期工作。但是,我使用 apache.commons.io 中的 FileUtils 方法来获取目录的大小,但显然我不允许这样做。我不能使用 apache.commons.io。我不能使用 Java nio 包。我无法创建另一种计算目录大小的方法(单独的方法)。这就是让它变得困难的原因。我已经有一个递归来获取所有文件和子目录的名称。我正在考虑向该递归算法添加一些内容,该算法将为我提供每个目录下所有文件的总和,但我无法弄清楚如何做到这一点。有没有人有可以提供帮助的想法?private void recurseDirectory(File f) {  if (f.isFile()) {       show f.getAbsPath() and f.length() on GUI }  else if (f.isDirectory()) {      show f.getAbsPath() and FileUtils.sizeOfDirectory(f) on GUI }      File[] files = f.listFiles();      for (File file : files) {           recurseDirectory(file); }     }因此FileUtils.sizeOfDirectory(f),在该部分代码中,我想开始添加该目录树下所有文件的总和,然后返回该总和,而不是 。
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

我能够通过在外部类的方法中创建内部类来实现这一点。在这个内部类中,我创建了一个计算目录大小的方法。我知道这并不理想,但这是一个有很多限制的家庭作业。很高兴让它工作。


OuterClass --> recursionMethod() --> InnerClass --> getDirSizeMethod()


类列表目录{


   private void recurseDirectory(File f) {


       class InnerClass {


           private long recurseFolder(File f) {

              long folderLength = 0;

              File[] files = f.listFiles();

              for (File file : files) {


                 if (file.isFile()) 

                     { folderLength += file.length(); }


                 else if (f.isDirectory()) 

                     { folderLength += recurseFolder(file); }   

              }

              return folderLength;

          }

      }


    if (f.isFile()) 

        { show f.getAbsolutePath() and f.length() on GUI }


    else if (f.isDirectory()) {


       InnerClass inner = new InnerClass();

       long dirSize = inner.recurseFolder(f);


       show f.getAbsolutePath() and FileUtils.sizeOfDirectory(f) on GUI }


       File[] files = f.listFiles();

       for (File file : files) 

         { recurseDirectory(file); }     

    }

 }


查看完整回答
反对 回复 2021-09-26
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

您可以使用另一种方法来计算大小,这也是递归的


private void recurseDirectory(File file) {

    System.out.println(file.getAbsolutePath() + " - " + size(file));

    if (file.isDirectory()) {

        File[] files = file.listFiles();

        for (File f : files) {

            recurseDirectory(f);

        }

    }

}


private long size(File file) {

    if(file.isFile()){

        return file.length();

    } else if(file.isDirectory()){

        long size = 0;

        File[] files = file.listFiles();

        for (File f : files) {

            size += size(f);

        }

        return size;

    }

    return 0;

}


查看完整回答
反对 回复 2021-09-26
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

private long recurseDirectory(File file) {

    if(file.isFile()){

        System.out.println(file.getAbsolutePath() + " - " + file.length());

        return file.length();

    } else if (file.isDirectory()) {

        long size = 0;

        File[] files = file.listFiles();

        for (File f : files) {

            size += recurseDirectory(f);

        }

        System.out.println(file.getAbsolutePath() + " - " + size);

        return size;


    }

    return 0;

}


查看完整回答
反对 回复 2021-09-26
  • 3 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信